{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['/home/hsu/github/Loss_ToolBox/LovaszSoftmax', '/home/hsu/work/md_segmentation3d', '/home/hsu/github/toolx', '/home/hsu/github/Loss_ToolBox/LovaszSoftmax', '/home/hsu/anaconda3/lib/python37.zip', '/home/hsu/anaconda3/lib/python3.7', '/home/hsu/anaconda3/lib/python3.7/lib-dynload', '', '/home/hsu/anaconda3/lib/python3.7/site-packages', '/home/hsu/anaconda3/lib/python3.7/site-packages/viewer-0.2-py3.7.egg', '/home/hsu/anaconda3/lib/python3.7/site-packages/IPython/extensions', '/home/hsu/.ipython', '.']\n"
     ]
    },
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'utils'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-2-6951f89a1216>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mlovasz_loss\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mLovaszSoftmax\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     17\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmdpytorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmulti_dice_loss\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mMultiDiceLoss\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mutils\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mIoU\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'utils'"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import sys\n",
    "sys.path.append(os.path.dirname('./'))\n",
    "print(sys.path)\n",
    "import cv2\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torch.nn.functional as F\n",
    "\n",
    "import numpy as np\n",
    "import SimpleITK as sitk\n",
    "import matplotlib.pyplot as plt\n",
    "from torchvision.utils import make_grid\n",
    "\n",
    "from lovasz_loss import LovaszSoftmax\n",
    "from md.mdpytorch.loss.multi_dice_loss import MultiDiceLoss\n",
    "from utils import IoU"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(19, 76, 76)\n"
     ]
    }
   ],
   "source": [
    "image_path='./ProstateX-0002/t2w.mhd'\n",
    "seg_path='./ProstateX-0002/seg.mhd'\n",
    "itkimage=sitk.ReadImage(image_path)\n",
    "image=sitk.GetArrayFromImage(itkimage)\n",
    "\n",
    "itkimage=sitk.ReadImage(seg_path)\n",
    "seg=sitk.GetArrayFromImage(itkimage)\n",
    "\n",
    "scale=0.2\n",
    "image=np.transpose(image,(1,2,0))\n",
    "seg=np.transpose(seg,(1,2,0))\n",
    "\n",
    "hei,wid,_=image.shape\n",
    "\n",
    "image=cv2.resize(image,(int(scale*wid),int(scale*hei)),cv2.INTER_CUBIC)\n",
    "seg=cv2.resize(seg,(int(scale*wid),int(scale*hei)),cv2.INTER_NEAREST)\n",
    "image=np.transpose(image,(2,0,1))\n",
    "seg=np.transpose(seg,(2,0,1))\n",
    "print(seg.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "image=np.asarray(image,dtype=np.float32)\n",
    "image=(image-np.mean(image))/np.std(image)\n",
    "image=np.expand_dims(image,0)\n",
    "seg=np.asarray(seg,np.int64)\n",
    "data=torch.from_numpy(image)\n",
    "target=torch.from_numpy(seg)\n",
    "data=data.unsqueeze(0).cuda()\n",
    "target=target.unsqueeze(0).cuda()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAChCAYAAADJLnTIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsvXlwnNd55vvrfd+BxtLYCIAASIAgIBKkSEqkKcoSRdqOE8uO7cQexfESK2V7KlWZyaSSKduJrUxNMnLZHpdiy0pk3WvLWi1FkilSEheJBAkSBEASjZXYG2h0N3rf1/sH55whayaJnXt9x0nhrUKxsLD79Ped8y7P87zvp6hUKmzapm3apm3av11T/p9ewKZt2qZt2qb9am3T0W/apm3apv0bt01Hv2mbtmmb9m/cNh39pm3apm3av3HbdPSbtmmbtmn/xm3T0W/apm3apv0bt1+Zo1coFEcVCsWUQqGYVSgUf/Krep9N27RN27RN+6dN8avQ0SsUChUwDbwfWAEuA5+oVCre/8/fbNM2bdM2bdP+SftVZfR7gNlKpTJXqVTywLPAb/yK3mvTNm3TNm3T/gn7VTl6D7B82/cr/+Nnm7Zpm7Zpm/b/s6l/Ra+r+N/87A6MSKFQfB74/P/4dtc/+kIKBXq9nubmZgBUKhWVSoVKpUK5XKZcLqNWq8nn8xSLRRQKBRaLBYVCQSQSQalUUi6X5WuJr3w+TyKRIJFIoFDcWu7/GxjLbDbj8XhQKBQolUpKpRKlUgmlUinXurGxgc1mo1wuy59rNBpyuZz8HLeb+KyRSIRYLPYvXtvt1tTUhF6vB5DXS1zHSqUi1y7WWCqVUCgUd3wW8a9CoZD/irWura1RLBYB5O//JVZTU4PRaLzjNcR6xfuL9xFrE2sW/wLy3ovvdTodhUIBv98vX+9fusaWlhZ57bRaLQD5fB6VSgVAoVCQ10tcD3E9xR4WawDQarXyb7RaLZVKhXQ6TSgUku/5y65XoVDQ3NyMWq0mmUyi1+vlNbn9HFUqFQqFAhqN5o7Xr1QqqFQqstkshUIBlUqFyWSSrw2g0WhIJpN3rPOXXeOWLVsoFotoNBpWV1dxu91yb8Kte3z7mRfnWLyP+B64496LnyuVSvl6wWCQXC73C69PmFKpZMuWLWi1WpLJJBqNhnK5TC6Xk/e8VCpRKBRQq9VyvbfvSbEfbl+/Vqslm82iUqmkv8tkMsRiMbLZLKVS6Z9aVqhSqVT/c2v/VTn6FaDxtu8bgNXb/6BSqXwf+D6AQqGoAOj1etRqNUqlEqVSyfPPP8/WrVu5evUqxWIRi8VCOp1mY2ODUqmETqcjnU6TSCTkYYvFYlgsFiKRCEajEb1eT7FYpFAoIN7DYDAQCASoqalBq9UyOTnJM888QyQSkc5WbCDxr/j/4vflchmDwcAf//Efc88993Dz5k3q6+sJhUIUCgW0Wi2rq6vYbDb5u507d3LmzBl5oKxWK08//TQ7duxgYGCAQqFAqVRCr9ej0WjQ6/WEQiGamppQq9Wsr6/zwx/+kPn5+Tsc8e2O5PZ1qlQqdu3axSOPPEJDQwOxWAytVst/+k//iSNHjlBfX49Op2N5eZl0Ok1rayvZbJaOjg7efvttHA4HKpWKjY0N/H4/DQ0N8pBrtVpUKhUzMzP09vaiUCjIZrNoNBqUSiXpdJqnnnqKYDCIUqmUB0E4lds372c/+1keeOABSqUStbW1LC0tkc/nefXVVzl69CjxeJxMJoNer2d4eBi1Wk1jYyN2u52rV6/S0NBAPp+nXC7T3NzM6OgoWq2WLVu2oFQqKRaL/OAHP+A3f/M3qaqqwmg0kk6n5T1Kp9O88sorpFIp+fe3JwgAPT09fPvb32ZsbIyGhgbUajWnTp1i9+7d8j77fD5cLhezs7MsLy9jt9s5fvw4c3NzTE5O4na7yWazmEwm2traSKfTXL58GZ1OR0NDAwaDAZ1Ox9LSEh6Ph2KxSCqVwmQysb6+jl6v58KFC5w/fx61Wk25XEalUsl73tvbyze/+U02NjbQarW43W6SySRPPPEEn/70pwmHw6TTadRqNblcjqGhIRkIisWiXFsgEJD3V9zXfD6P2+3GbDbLRMBkMpHP56Xj0uv1BINBNBoN09PTzM3NcePGDdRq9R178/HHH2f79u0sLi4yMTHB4cOHGR0dJZvNsm3bNuLxOCqVimg0SigUYm1tjZ6eHpqbm+WaRWCxWq1MTU3R29uLTqcjFAqh0WhwOp1yXTqdTgZ4AKvVSqlUIpfLoVAoOHnyJFeuXKFcLsvPBvDTn/6UYDCI3W7nnXfeob29Ha/Xi9lspr29nfX1dVQqFVqtllKpxMrKCvX19eRyOZRKJdlsFp1Oh9frpa2tDYVCgc/no6GhgUKhQDabxWKxyHVarVYUCgVarZZcLsf58+d54IEHSCaTuN1uJicn+dGPfkQ6nZZJDrD4izjkXxUZq+YWGXsE8HGLjP1kpVIZ/0f+vgLwjW98gx07dhCJRKirq5OO86WXXuJDH/oQP/nJT9i5cyeXL1/GYDDQ2dlJMBiUm12r1bKxsUE4HKatrQ2NRkMmk5FORWQnqVSKs2fP8qlPfUpm1NXV1Xi9XsrlMhqNhjfffJObN2/KgyEu7HPPPUehUKCmpobV1VVqamqorq7m9OnTvP322zz88MOMjo6i0Wg4c+YMH/zgB1lZWaG2tpZsNovdbqdYLFIqlZifn6evr494PE6lUuH69euYzWZqampk1bG2tkZHRwdarRan04lKpSKRSMgsKp1Oc+7cOS5cuIBKpZKf9emnn8bhcBAOhzGZTNhsNmZnZwmHw+zYsYOpqSm++93v4vF4qK2tZc+ePUxOTpLL5aivr5fB0ev1cvjwYUKhELOzs/T09HD27FmcTicejwev18uhQ4eIRCLY7XaMRqPcwKVSCY1GQzQaRafTkc1meeGFF1hYWJCH6cyZM2xsbEhHsbCwgMfjYWNjg8XFRV5//XUA9u7dC0B9fT3lcplUKoVer+fkyZPs2bOHixcvolKp6O3tJRQK4Xa7aWpq4urVqzgcDnw+H729vcTjcaqrq6WTvL0KTKfT6PV6fD4fg4ODXLp0Se7RH/7wh7S0tHDt2jXMZjPRaJT33nuPD3zgAzz11FOEw2F0Oh1HjhxheXmZ9vZ2TCYTiUQCvV7PpUuX5NodDge5XI66ujpu3rxJc3MzqVQKo9HIzMwMHo+Hc+fOMTAwgNPppFwuMzg4yH333UexWESn06HRaNjY2CCbzfKtb30LgP/yX/4L3d3dlMtlnn76aVpbW+nu7ubNN9+UScHo6Cj33nsvfr8fl8tFTU2NvHfpdJrV1VWqq6uJx+PEYjGcTid6vV5WbCqVCrPZzOLiItXV1UxNTdHf3y+vocViIZPJyGBfXV1NIBAgkUjw+OOPA/D8888Tj8cZHh5mZWWFQ4cOUalUmJ6exmKxYDQaWVxcJBaL0dnZST6fR6FQEIvFpMMW62xsbGRlZUX+XGTS4isajUrHLs5HY2Mj6XQal8tFKBTCbDZjMBhQq9WkUim+/vWvA/DKK6/wJ3/yJ3z+85+nXC7j9/uJRqN4PLdQ6EwmQygUwmAwkE6nZTVkMBhIpVKyalAqlZhMJkKhkEx6dDqdDKSlUolMJoPNZpPrNZlMHDp0iGeffZa2tjZGRkbYt28fqVQKg8HA1772NXHWhyuVyu5/ziervvrVr/5zf/NL21e/+tXy1772tRng/wa+BPxflUrlxX/s77/2ta99FeDrX/86lUoFp9MpnRzA9u3bGRwclGVjVVUVPp8Pi8WC3+/HZrOhVCrJ5XK4XC5SqRSFQgGHw0GxWESv11OpVDh//jyBQICGhgYcDgeHDx9mYmICm81GNpvFbDbLA9TR0cFDDz3Efffdx8MPP8yJEycol8t0dXXR09NDuVymqqoKhULBSy+9RFdXF11dXTz77LMcP36cQqHAwMAAqVSKmpoa8vk8w8PDKBQK4vE4Ho8HrVbL2toaJpOJYrFIVVUVDoeDN954g1KpxPXr19myZQvlcllmrNFoVDqnp556ikQiwdatW/nIRz7CRz/6UV577TUADh48SCqVwm63ywDyZ3/2Z+zfv19mRXv37qWtrY1z584xNDRENpulsbERr9dLsVgkFovh8/lQKpUYjUacTqesLDo7O7l06RJVVVV4vV48Hg/Dw8PyUIXDYfL5PKVSiQsXLnDmzBm2b99Od3c3u3fvlk70wIEDMou+evUqKysrXLt2jXK5TDqdZtu2bTidTkwmE8PDw6RSKRlIFhcX6enpIZFISOen0Whk1rm0tMTGxgb5fB6fz8ehQ4ekszMYDGSzWX784x9js9lkdnfq1Cm2bdtGY2Mjg4ODsqKrqanB4/EQi8VYW1vD7XZTX1+PQqHg4sWLHD9+nObmZpaWljCZTEQiEVkhhEIhGhoaWF9fp1wuo9PpSCQSMuuPx+MkEgmi0SilUgm/38/Bgwfx+XyyAjp48CAXL16Ue/X555+nv7+ffD7P0NAQlUoFt9uNRqMhFAqRy+VQq9Xs2bOHpaUltm7dSjabxePx4HK5yOfz1NTUyARDp9ORy+WwWCz4fD65tyuVikx0RLV86dIllEqlzOAzmYysOoxGI8VikUQiQSqVYn5+XiZSZ86cAWD//v04nU7effddWltbcTqdch+bzWauX79OsVhky5YtnDt3Do/HIx1hKpWSZ0+pVBKLxSSEks/nyWazwC0I5ebNmwAMDw+za9cujEYjGo0Gv9+P2Wwmn8+zvr7O9PQ0fX19LC0tYTQa5To/8IEPsGPHDpLJJFarFYPBQH9/P9FolNHRUS5fvoxer2d6epqlpSUaGxtlJZjNZonFYiSTSSKRCH6/n0wmg0ajQavV3gHxzc3N4ff7uXLlCnfffTeZTIbR0VGSyeQdlZWosM1mM6dOnRJ7c+2rX/3q9/85n/wryeh/WRMZ/RtvvCFLlv7+fsxmM5lMhmKxyPT0NI2NjeTzeeLxOMvLyxiNRp588km+/OUvS3jB7XZjMpkkFilKsR07dhAMBpmdnWV0dJTe3l68Xi/33nuv3NBPPPEEf/qnf0qpVJIwRDQaxeFw8Gd/9meUSiVef/11yuUyzzzzDOFwmM985jOoVCrS6bTMZESpu7KygsFgkJsqm81SqVSwWq2srq7KjLmmpobW1la0Wi1KpRKfzycPWzabJRKJMDAwwPj4OFu3bsXr9bJ//350Op3EBLVaLel0msceewyAL3/5y+zevZtnnnmGhx56iL/927/lK1/5CtFoFIPBQDQaBWBxcZF0Ok1TUxNnzpzhyJEjhMNh+Zmy2SxqtZq6ujqSySQGg0Fiz4JX+PnPf04wGORLX/oSXq+XkZERHnroISqVCqdPn+b48eOUSiVZyej1epmFfuMb32Dnzp04HA6uX7/OiRMn+NCHPsTq6ipWq5VgMMj169elU5uYmKCxsVHen3w+j16vJ5/Pk8lkqK6uJplMyow/mUxiMpkwGAy89tprNDc3U1NTI+Gq9vZ26uvr+fu//3s++MEP4na7yefzFAoFvv/9/3l+/uiP/oiuri6SySTZbJaFhQU6OzsJhULSsUciEU6dOkVbWxszMzPcc8891NTUkMvlMBgMKJVK6cx1Op3ElFUqFUqlEr/fTyAQ4MaNG3z0ox9lcnKSUqmExWKhs7OTXC5HpVKRGejs7Cytra184xvfAOA73/kOXu8tBbOALtRqNRqNhqmpKbxer3QyuVyOTCZDOBzm4YcfJpVKEY/HJX6dyWRwOp3ALaijtrYWpVLJtWvXKJVKtLe3s7i4SD6fZ+/evYyMjNDc3CydkdvtZmNjA4vFQqVS4Vvf+haZTAaAP//zP8dkMsnzkUgkaGlpoVKpMDExgcFg4NKlSxiNRtrb2zlx4gRNTU0UCgXi8bisdkUGnc1mJU7e2dlJXV0dExMT6HQ6mpubmZmZIZ/Pc/ToUZnla7Va6ZALhYLE3x9//HH52n/5l3/J8vKy5LTUajVGoxGz2czZs2eJRCI88MADvPTSSzQ1NXHt2jVUKpWsak0mE0tLS7KaFc69XC5LJMBqtaJSqVhZWUGtVtPS0oJer5cVcbFYJBAIYDQaMRqNNDQ0cOPGDV555RWxNf/PZfS/rImMft++fSwvL9PW1sbZs2cJhULYbDby+TxarZaTJ0/i8XhYXFykvb2ds2fPcvToUYl5WywWTCYTU1NTrK2t0dzcTC6XI5VKEQ6HJT6mUqlYW1ujrq5OZnOFQkFmrLlcjng8Ljfyt7/9bQndHDhwgHg8jlqtpru7m5qaGh577DH6+/ulU6xUKgQCARobGzGbzTz55JP09/ffUVKaTCbC4TC7d+/GbrdTLpeZn58nHo/T0tJCS0uL5Bq6u7vRaDTy7+rq6mS2Go1GUSqV/PVf/zXDw8Pk83kAjh8/TiaTkdj8gw8+SCQSkdcql8sxOztLW1sbBoOBV155BZvNhlarlU5IkERms5lisSixdYPBwNzcHGazWX4eq9VKdXW1JM5FUNNqtdTV1Ulc8e///u8l5wJQV1dHpVLh7bffplQqsXXrVmKxGKVSiUQiwauvvsrBgwc5ceIEFy5cIBgMks1mZfBfWloiFArJ6mNmZoapqSlJaN6OgQYCAUwmE01NTTgcDqxWq8SmW1pa5OcxmUw88cQTEl5Sq9V861vfYmJigtnZWRQKBQ0NDYRCIUmizc3N8e6770o8+q677uLatWtUKhVOnjzJjRs3KBQKeDwe/uEf/oGxsTHm5+cZHx8nFApRU1ODwWDA7XaTTqdpaGiQ8GVzczPXrl0jHA5L8k/AAf/9v/93iT3n83nJr1itViKRiAxqxWKRnTt3MjIyQjQaxe12c++991IsFvF6vQQCAYmJWywWdDod4XCY9fV1YrEYY2NjaDQaGhoaqKqqQqVS4fV60Wg0tLS00NzcTCaTIZfLsb6+LveFUqnkhRdekI4O4OjRo6jVatLpNHa7ncnJSQwGg4RNR0ZGcLlcwC3CO5/Py31qsVhkMLbb7XR0dGA2myXcEYvFZHVTX19PPB5naWkJq9WKWq2WgW59fZ1wOExjYyNqtRqXy8X6+joTExOyYu7t7ZWO3e/3S24sGo0yNjZGR0cHk5OT9PT0MDMzA8C2bduoqqqitbUVs9lMd3c3jY2NtLe309HRQXV1NU1NTZKPsVgsFItFOjs78fl8hMNhkskk8XhcBtxCoUBHR4esLnU6HdevXxfQzS+U0f9aOfoHHngArVbL+vo6TqeT06dP43a70el0xONxLBYLP/zhD7Hb7Wg0GoxGIz6fj6amJnkozWYzDoeD5uZmOjs7icViGI1G4FZmInD8aDRKT0+P3BgiysZiMUKhkFR8zM7Osra2JrHvcDjMwMAAPp8Pq9XKwsICn/70p6XiQGCyTzzxBPfffz/T09P09/fz4osvSkci4BtBFEciEZkFzc3NYbFYyOfz+P1+ie+LbFiw8UKxYzabUSqVDA8P43K5iMfjwC24S6lUEggEyGQypNNpkskkMzMzOJ1OSqUSbrebq1evsrq6ysbGBnfffTeXL19mdnaW+fl5VldXSSQSKJVKrly5ws2bN/H7/eh0Ompra8nn8+h0OpRKJR0dHcTjcaksyOVyUimRzWbJZDIoFApGR0dpaWlhY2MDpVLJb//2b6NUKmloaCASiTAyMiKvkU6nw2AwcPbsWfx+P/X19Rw6dAin0ykrOq/Xi1KppFAoSOfr8/lIp9OoVCqqq6vJ5XLodDqCwSD9/f1kMhmZRSeTSbkPxboFBix+p1AoqKurk04QwOfzYTQaicVihMNhzGYz6XRa7r1oNEo+n6epqQmtVovZbMZkMrG8vExzczPBYBC9Xk9NTQ1Wq1WqsRKJBJFIRB78UqnE9PS0hHhuhyZ1Oh0jIyPS0X/84x8nk8mwbds2uV/W19cJhUJ4PB5UKhVvvfUWTqeTxsZGRkdHaW5upqGhAaPRSF1dHSaTie7ubhm4q6urMRqNOBwOampq5HVSKpVUVVVJ3DwajeL3+/H5fGzZsoVCoUAqlZKQzNDQkLzO73vf+9BoNKytrTEzM8P27dvR6XRcunRJOtxz586xZ88eLl++TH19vVQgNTU14XQ6qaqqoqqqCq1Wi9VqxeFw4HQ6MZvNkgdRq9UYDAZqampYXFzE5XLJJMHr9dLe3n7HHtVqtRSLRfx+PwqFgj179mA2m1leXiYSiTA3N0dvby/z8/MAjI2NEYvFpI/ZsmULOp1OVkICThTiEpFE6fV66V90Op1MelpaWkilUhSLRdRqNT6fj42NDclzCOinUCiwtrZGIpGAf22OXqVS0dPTQ6VSYXR0lPX1dfr7+7HZbKTTaaampqitrcVut7N3716JY919992srq5y8+ZNCoUCZ86cIRwOs7q6yvz8PD6fj0QiQTqdJp1OMz4+jt1up7GxUeKher2edDotI2ipVGJjYwO9Xo/VamV+fl46k/vuuw+bzcb58+d58cUXmZmZkTCRz+ejurqaWCyGx+NBrVYTCASYnp6WZbSAdy5evMjS0hLT09Pk83kCgQArKysMDAzw7rvv4vf7qaqqoqmpiWQyKZ21yLTHxsak89br9ezevZsbN26QSqUA+MxnPkOpVOKpp55ifHycuro6stksW7ZswePxkM1mmZubo6Ojg7GxMVpbWwkGgzKjbG9vp6WlhdraWqLRKH19ffJA+Xw+6ShnZ2dxOp2SvFUoFPLAwy2ytbGxkaqqKnK5HH19fSSTSYn9Hzt2jHg8zssvv8xrr73GxsYGNTU1MribzWb0ej2HDx/mrbfewu12Ew6HUavVZLNZenp66O3tpampSZbqW7Zswel0YrVaJaarVqvl62WzWUKhENevX6exsZGhoSFu3LhBIpGgq6tLZlBarVau8+jRoygUCh5//HGGhob46Ec/SrFYJBQKSVjJ4/Fw4cIFdu/ejcfjkeSl2+2mra2N+vp6PB4PNpuN3t5e2tvbcblcZDIZDAYDcAvGUalULC0tyQC5sLCA2+3m9OnTzM/Ps3v3bilA2LlzpwzQdXV11NTUcOnSJV588UW8Xi92u52qqiqam5s5f/48n/jEJ1hcXKS/vx+Px0MikaC5uRmr1YpGo6G6uhqNRoNKpZKwo9PpxOl0SsJcOHeNRkM2m0WhUGCz2XjnnXcIBAKMj48zPz/Pzp07SSaTjI+P09jYyOrqLeFdMBikpqYGm83GM888w9WrV4lGozQ0NEiew+1209vbi1qtRq/XU19fj9PplCSmeH9xHYTKzGQyYTQaJbYdDoexWq2SB3G5XAwODhIMBpmcnKSmpgaz2YzX6+X8+fNEo1FZjbpcLpqamvjpT3/K0NAQkUgErVYrK32n08mxY8dkVSAgNfifqrfbJbRCnCCCi+AO9Xo94XCYUqmEyWSiVCpx5coVYrEYwWCQqakp9u/fz/Xr1zl//jzXrl0DEHzEvy5Hr1QqOX78OE8//TTDw8PMzs4yMjLCmTNnuPfee5mbm2N5eZmWlhZWVlYIBoMkk0neffddkskkc3NzrK+vMzc3x9raGouLi8TjcVmilctlLl68SGNjI1arVeL3W7duZWNjg5mZGU6dOsXc3BwjIyNs375d4me7du3iwIEDvPfeexgMBmpra3nhhRdIJpPodDqGh4d59913OXDgAPX19ZKcCofDnDhxglwuh8fjYWFhgXg8TqFQYGJiQpZqRqORVCpFJBLh9ddfZ3V1laqqKqkE2L9/P16vV0rBrl27RiAQYGlpif7+fpaWlqirq2Pfvn28++67ADIre+ONNygWiywtLbG+vs7Fixdpbm7G7/dLLLFSqRAMBqU8rFQqkU6nWVhY4K233pIBSavVMjMzw9zcnAyqx48fJ5FIYLVaUSqVrK2tEYvFuHr1qpRJzs/Ps337diYnJ6V6aHx8HIVCwcLCAlu3buWll16iXC5jNBoZHR1lamqKXbt2odPp2LdvH6dOnaKvr4/h4WEGBwdlBTA7O8vExATT09MsLy+zuLhIJBIhHo9TX19PKpVieHiYuro6jEajzISz2Szj4+N4vV7pUAVGKtZfW1vLzZs3qVQq3Lx5k7179/LWW2+hUCjwer1yvwiFl1arpaamhqGhIXw+H1NTU2g0GtRqNcFgUCom4JZiQ0hGjUajVKnArWqhq6sLs9lMoVDg0qVLzM3NkcvlpPz10qVLxONxzpw5QyAQIBwOo9fr8fv97N69m4mJCYldDw4OotPppFqkqamJsbExZmdnpWBBoVDc4bhFwBFOVFSTSqUSm82GRqMhFovhdrtRKpX8/Oc/l0mSwL67uro4f/48fr+f1dVVWXULKNZsNnP58mUqlQrr6+t4vV5u3rzJww8/TKFQ4OrVq3R0dEh+QMgOBYx4uz5doVDIREo4SxGABETT0dHBiy++KM9gqVRi//79XLlyhZWVFQkvigxbkKkHDhyQUNbc3ByJRIL+/n4OHDgg/ZCoJg0Gg1T3CC7BaDTKaylEFclkErVaLb/EHoBbxP+VK1ckB1WpVNi5cyeLi4uEQiG5vv9Ryf1Cjv5XpaP/pU2QJKJBwOFwkE6n0el09PT0oFAoMBgM/Pmf/7mEbUwmExqNRv5NJBLBZDIxNzeHzWbD4XDI3wvnefbsWcrlsmzOeOSRRwgGgywtLVGpVGTmKzI5kVk99NBDADz44IN3yPNEM0lNTY080P/5P/9nqa+12Wx3KG3Ehuzs7GR0dJTW1lYsFgtWq5VEIoHT6SSZTBKNRvn5z38OIDd5LBYjHo9LDb9SqcTlcmG1WnnvvffugCFisRhms5kjR47wzjvvoFKpWF5elk0kNTU1/M3f/I1k/rVaLX19fRI3ValUWCwWCoUCs7Oz7Ny5U2Z/nZ2dBAIB+vr6ePXVV9nY2KBYLDIwMEBbWxvDw8NSZ10oFDCbzaRSKVpaWhgaGpIHvlwu87GPfYxiscgXv/hFfD4fWq2Wl156iUqlIt/3i1/8oixx1Wo1hw8fplKp0NraSk9PjyQbh4aGuPvuuykWixKvvXbtGolEgjNnzkiI7MCBA5jNZhKJBJVKhV27djEyMsL+/fspl8tcuHCBfD4vHS+A3W5naWk/50jWAAAgAElEQVSJL3/5yxiNRp5++mkJmQjy99lnn0Wv12MymYjH4xw4cEA6SNGkdfLkSfr6+giHwxSLRYxGIxsbG6ysrMgEJJPJsH//fq5duyax6mKxSHNzMx0dHczPz5PJZFhbW6NcLrO8fKsJ/caNG7hcLnp6evi93/s9qX750Y9+xNraGjt37kSr1fLtb3+bcrlMoVBgZGSE/v5+XC6XlBsKZY84O4KbiUQikpcQ3Mf+/ftlxVypVPjt3/5tZmdn8Xg8d/Apt+v9FQoFV65coa+vj0cffVRCnel0Wmr9d+zYwdLSEj/96U+x2+3s2LEDp9OJwWCQQUZIjIXkVFQh4oyJpkVRXUejUfR6PalUigcffBCVSsXY2BhLS0t3BA9h2WyW0dFRYrEYhw4dYu/evZw+fZqxsTG2bNnCjRs3MJlMpNNpfD4fzc3N0md5vV78fr88b01NTdy8eZO77roLtVpNoVCQ/TJiX4trYzKZqFQq7Nu3j1wuh9ls5uWXX5aKrWKxeEePxy9ivzaOHm45tN7e3jsaRwqFAslkkscee0zCH4KQ2rFjB8vLy6RSKRn9BJauUqlwOp1otVoWFhaw2WxUV1eTyWRko0OlUuHJJ58knU5z7Ngx3n33XQYGBlhYWKBSqdDU1ITVauVnP/sZL730EnArG8nn8/zxH/+xlI19/etfx26388ILL0iJmYjE4pCvrq6yb98+YrGYzORUKhVWq5WGhgaJaQui9/Zu0xdeeIFcLseRI0ek0ubgwYOcO3dOElzz8/NSxQHw+uuv8+lPf5rOzk66uroA+N73vodGo+HcuXNcv379jkam1tZWVCoVGo2G+vp6KUFzu93Mz8+jUqnYu3cvKysr5HI5amtrWVtbk6WpRqOR2XZXVxfxeJzf/M3fJBQKoVAoKBaLLC8vEwgE0Gg0cp1PPPEEH/7wh3E6nXR1dZHL5WhsbOTBBx/kJz/5CefPn5ebW6g9hNa6oaGBubk52Rwnym2hGPJ4PEQiEcrlssTyy+Uy58+fp1gs8h//439keXmZQqFAY2MjWq2Wq1evCuzzDke/urrKuXPnOHjwIDqdjt/4jd/gxRdf5Pd+7/d49dVXWVlZwWg0yoN94MABurq6MJlMRKNRFhcXJQxpt9uBW8qYeDxOU1OThMjEffz+978vmwA/+9nPUigUiEajqFQq/H4/wWBQVqXiHur1egqFAufPn6e3t5doNMqOHTt45JFHCIVCPP744//L3tq/fz8Wi0VCCg6HQ0pThcbe6XTi8/kktLm8vCx7EMbGxiiXy1itVt73vvdJqGxiYuIOsvp2E/v0ueee4/3vfz/PP/88n/vc56ipqeH8+fM88cQTUoOuVquxWCwsLCwQDodpaWnhypUrmEwmLBaLbFbT6XTU1NSg1+uJx+OMjIxQLBZlw55arSYWi1FXV8cHP/hBLl++LLkOQAoUblchCse6tLTE2toa77zzDmq1mvvuu4+f/OQnMthoNBrJedxzzz3Mz8+zvr4ug6VwzDt37mRhYYFgMMiBAwd45ZVX6O/vZ3JyUlaVBoOBfD7Phz/8Yc6ePSshUSGzFQKHX7az99cGuoFbutXGxkb27duHw+Hg0KFDnD9/ntOnT+N0OmXWIPC3QCDAwYMHSSaT5PN5SRCurq5SV1dHbW0tFouFbDaLXq9Hp9MRCARIpVKyLVqlUuFyufB6vXzqU5+iWCzS2tpKW1sbuVyOq1evsry8LOGMubk5+vr6sNlsWK1WjEYjH//4x+XBFPpsob7p7u5Gq9VKVY/RaMTj8ZBKpZienpbwhIjqCoUCl8tFa2srCwsLspTW6XTcvHkTtVrNF77wBSwWi2wAunDhAolEgkKhcMfGFa8vulmPHDnCtWvXWF1dlc5WpVLR0tJCY2MjqVRKNqeYzWbZeSqarMLhsMyWREYouiiFdEwEN51OR2dnpyRUL1++zNLSksyyRPmp1WoJBoPs2LGDCxcu0NjYyLZt23jmmWfk5xFkltVqpbOzU1YziUQCk8lELpcjl8vh8/m46667pMJCtKnr9XopbQRk5+vFixfp7OykUChw7do1mpqaGB8fl/tDkPSA5Eb6+vp46qmnaG9vR6VSceLECSmZhFsNXa2trVRXV2MwGIjFYuj1ehKJBGazmYWFBaxWK/X19dhsNnmvBGxlsVikAxKk9NjYGI2NjZw7d475+XlZ+YmkAJD4r8PhkL8fHBxkZGSEVColyVBxb7du3Sq5DJFhClmy0+lkfX2d5uZmXC6XTKzsdjsOh4OOjg4JiQjsuVgsMjU1JVVQtyvMxHUU91ypVNLf38/i4iJ2u52JiQl27drFY489xvz8/B2d41u2bJE4ttlsxmazyQ5jkYx0d3fLbmXRyX27aqxYLJLL5WQD5cTEhEzERJIioBaxP+AWmSoqA5HBP/LIIzz33HMUi0Wp6vJ4PDLI9vT0kMlkiEajKBQKScxmMhkWFxdpa2ujv78ftVpNe3s709PTZLNZ0um0lGarVComJyd58MEHmZqaktWGuDdCYvqvVnWTSqXYtm0bBoOBlZUVpqam5AEQKgUx6+LYsWPcvHlT4vVCKy2IrK6uLjKZjMywstksKysrMoMSm/T2OS9er5cjR47IluZ0Os3FixflZhVNNfPz81ItU1VVxfT0tCRIhAa3WCxSU1NDMpmUWL440OKQzM3N0djYiMPhkIdhenqajY0NfD4fjzzyCBMTE3fMzyiXy1y9epWBgQHm5uZQq9Vcv35drlE4ejF7xe1289JLL7F7927+6q/+SgYgUUofOXKE3/md3+GNN96QAVGsXahyKpUK27dvx263S2mfcIZ79+6lp6dHqkyEI8/n8xgMBgYHB2lsbJRqHYFNikqkvr4eo9FIfX09b775Jn6/nxMnTsiMUafTcfToUTo7O/nc5z7H0NCQJFSrqqpk34SQpQ0MDEhsOpPJSNhBoVBQX19PIpEgn8/L6zA+Pk53dzcjIyM0NDSwsLCAXq+XmbK4ngMDA7JRbGRkhIGBAf7hH/5BYtKCKBTOMh6PS1xXqHGUSiUTExN0dHTI4K7RaOT+FZJDEfAF9gwwOTkpr6+AC8XnEUIBkeml02n27t3L6OgojzzyCCdOnECn0+FyubDb7bKLVPACQs1TXV0tk5FwOCyDqiA1xXuLMQmia1bgzgqFQjb8uFwuqWYRv7t9BIGAS+x2Ow899BBjY2MS7hRyRJ1OR1tbmxQjCGJZoVDIs2i1WqWySWDz4XAYg8GAwWDAZrPh8XgkSZvNZnE4HGzbtk1CKreP6RDOH5B8SqlUwufzsWvXLtnN7nQ6aW1tpba2FoVCQUdHhxzJEAwGZfBMJpOyohHqstraWukjfD4fNTU19Pb2yhEjFosFu93O4uIitbW1cnSJ2WyWRPgHPvABbty4Ab+go/+1esLU4uKibCWPRqNcvnyZeDxOIBCQG75QKHDvvfdy8uRJmVU6nU4cDofE8UXWKZyAUHAIberi4qLMQoQ6wm63o1Ao+M53vkMsFpMb83aZICAldYODg3i9XjKZDD/4wQ+kYxWlnE6nA2BjY4NKpUJ7ezsKhQKj0cjS0pJsaBHcBNziKRobG4lGo8RiMb773e/S1dX1v52/MzIygtfrlcoIwRkIE1ijUBSJQCkOpSD1Tp8+zX/7b/+NRCIhZwOJbGptbU2OQ6irq6O6ulq+l0ajIRKJEA6HWVhYkHpm4ZyEJDObzbK4uMj6+rpsE79tToeUtA0PD1MsFtm9e/cdA6q6urqorq4mlUrx8ssvo1KpWFhYoFgsYjAY5IwSUeIXi0WsVitut1sqSZLJJL29vWzdulVWY0KeqtFoZMUmHObtw6aE+Xw+MpkM77zzDoVCQUp1RfdpU1MT27Zt46677iKRSKBWq0kkEnI4WS6Xw+l00tHRgcvlkpXM+vo6HR0dUp+tVCrJ5/MyYIj9rNVquf/++zEajezatYtyuczS0hLwP+cviUDc0dHB6uoqe/bsIRKJsH37drZt24bD4ZDzoQDZR5DJZKReXKVSkc/npaRRnB2DwUCpVMJsNkvnJVQiHR0dNDU1sWXLFvL5PF1dXTIAiYB+OyTidrulLPLGjRsMDw9LyW5PTw/V1dVyzo/f76exsVFCgIKrEhzS7dmuqGqE/3A4HHLcRH19PVu2bOHuu++mu7tb3p+lpSWam5vlnKQ9e/bIdYpEoVgsSoWbyWTCbDZTV1cnK4GqqirpW4QyT/SbiCRNpVLJPhXhJ0T3suCUBFzc0NBAdXU19957Lzt37sTj8Ui5qk6nY2Bg4I4Bcr+I/Vpl9EajkenpaVZXV2UTisCNhXMSjlLc9JqaGhwOB5lMRg4UWlhYoKmpSRIb4XCYtbU12Z4tMLP6+npWVlYkjiqyPIG9i8xQ3GDBBfT09EhCbNeuXQwODkq81Gw2c+DAAWZmZmT07enpYWpqSjqtjo4OgsEgc3NzbN26Vbaeq9VqRkdHZemqVqtZW1vjd37ndxgdHb1jNksul2NjY4POzk4WFxclXCIOschg5ufn5YwdAf2Uy2X27dtHX18f09PTxGIxqSAwmUyyC1OMMxgfH8fj8ciGtHQ6LUc0rK2tEQgE2LNnD729vWxsbEgZqFKpZPv27VRVVcl5N0L+KZy9mBtTV1fHxsYGHo+HUqnEnj17uPfee7nnnnuYmZnhxo0bMkDX1NRwzz33EAgE5HAou93O0NAQbrebQCBAdXU1a2tr2O12ea8Ampub6erqwmg0SiI7Eolw9913y25Mgb0K4u72CYixWIzPfe5zhEIh7r77blpaWrBarRw5cgS73S5lryLQhMNhCcWVSiWi0Sjbt2/HaDTKfpBwOEylUmFmZobDhw/T0dEhpzdu3bqV2tpaGhoaSCQSZDIZxsfHJRzn8XjYunUri4uLUhywtrbG/Py8zA7F5xTzWh599FHUajXXrl3DZDKRTCbZtm0bc3NzuN1uAMl3FItFqqtvDUf0+XyS9FxfX+f48eNcv36drq4uLBYLXV1d2Gw2SqUSs7OzhEIh7Ha7DByRSARA6u/T6TROp5ODBw+yY8cObDYbdrudQCCA1+vlK1/5CpcvXyYUChEMBuXgMIvFQn19veTSdDodVquVSqUi99fExISEOsQoCiEfzefztLa2MjMzQyKRkOtcXV1lfX1dDmr7xCc+wcrKioRFf/d3f1f2tAgep7e3l9HRUTKZjFT+tba20tfXRzQaJZlMUiqV5L6qr6/H5XJJkvvKlSuyYpqfn5dNc2LgolKp5L333pMzetrb2xkeHmZ6elrAiv/6oJvdu3ej1WoxGo0Sm4JbTuELX/gCY2NjUhYlJHKii2zHjh3U19fLCyY04HCrClhcXKSpqYmqqir8fr+EZoTOWbRC357phcNhAoGALEHz+Tw7d+5kamqKu+66SzYZiYFin/3sZ7l+/ToTExOo1WpZnlssFsLhMF1dXWg0GuLxOJFIhImJCTweDzt37qRUKpFKpaRmPZ/PE4lEKBaLjI+Py4mN2WwWg8EgMySlUim170J+B8jKIJPJ8MUvfpFLly5x8OBBOcDs5MmTDA8Pk8vleOihh4hGo1KuCRAIBAgGgyQSCQwGAw0NDfj9fjY2NmS3regYLBQKDA8PSwno+973Ptrb2/F4PLS1tfHOO++QzWaxWq2SSBXZq8islpeXefTRR7FYLJLX6Ozs5E//9E/lSILf//3fZ3x8nKGhISwWCzMzM3R3d3PhwgXpLLZs2UJTUxPDw8PY7XZ5SLZs2cLQ0BCjo6OYTCaZ3SoUCqka8fv9supwu93YbDYCgQCAhPsE/BAKhdBqtRgMBil9Gxwc5P7775cVgRg+d/36dQYGBqiurpY9HCaTSX69+eab+Hw+9Ho96+vrbGxsSI5ITPTUaDRyRpHZbJadvKJRKZ1O8/u///s4nU4ikYiEeQwGA1u3bpV799ixYzz55JOEw2E2NjZoaWnB7Xazvr7Orl272LZtG+FwmHPnzslJlCaTCbvdzvr6usy+E4kEbreb1tZWBgcHOXjwIAaDgbW1Nc6dO0cmk+HjH/84PT09tLa2otFoZKPRo48+yq5du6irq+Pq1ats374dl8slJbCjo6N86Utf4vvf/7506CaTSQb+uro6RkZGJOczPT1NKpViYWGBrq4u9Hq9vO/Nzc1s376dl19+mebmZtra2uTsnMHBQT760Y9y77330t/fz6FDh9i3bx/nzp1DqVRy+PBhmpub5TXJZDJ0d3fL6757924CgQBTU1OyiXH//v1s376dVCol+R6HwyGbuMQcIr1ej8PhYHh4GK1WS29vL8eOHeO5557jwQcflNr/8fFxEokEv/Vbv8X27dtpbGzk0KFDdHd3C97lX5e8EsDv95PP53G5XBJa+cQnPkF1dTXf+c53JN4q5jWLlub77rtPloki4xBZnlDeOBwOlpaWCIfDUvMMSHnao48+ys9+9jPi8Tgf+9jH+MEPfiAVKDdv3sRoNJJIJJiamsJutzM6OsrWrVtZXl7mwQcf5AMf+ABf+cpXKBQKFItFGhsbCQQCMisUTsXn81GpVDh79iwOh4MDBw4wNTWFy+WSuvnLly9LbkJ0mxYKBdbX13n44YdJJBLE43FaW1t54oknaG9vJ5PJ4Ha7ZdYkBiJtbGxw+fJl9u7di9Fo5NixY/zBH/yBxKwzmQw3btxAqVRSXV3Nz372M9ra2vD7/ezdu5eamhrJFTz55JPcddddjI2NSY5ClKNCvRKJRBgbG+Ohhx7ivffeY3l5Wc5WCQQCUooqrr0oW9PpNCdPnsRutzMwMIDH4+F73/seLpdLtt6LQWkdHR0MDQ1hMBhobW3lj/7oj6TaZOvWrYTDYS5fvozdbmf37t2cOnWKyclJtm3bRqFQ4ObNm1RVVdHZ2Sm135OTk9jtdg4fPsyNGzeIRqPSyYt2+Pb2dq5evcrCwgJtbW2yhd3v9zMyMoJer+fs2bNMTEyQTCblsL33v//9JBIJTp48yfT0NE6nU8Ilop2/vr6eyclJOUCuVCpx1113Sa4jHA7zoQ99iMXFRQYGBiSPFAwGmZ+f5+2338ZisdDX1ye7eAcHB+UUzWg0KtcqJpqmUilGRkbo7e2lo6MDr9fL008/Lc+jUqlkZWUFm80mB/mJhqFsNsvIyAhHjhzhyJEjkuCuq6ujXC7z6U9/GpfLRS6Xk7DW22+/DSDVZi0tLXzwgx8kkUhIpdT6+jqf+tSniMViLC8vs7S0hNlsln0AmUyG06dPA8h7ZzAY0Gq17Nq1i0AgIM9RLpfj1Vdfpbu7mz/4gz/gJz/5CXv37iUcDjM2NsaxY8ew2WxSwy6uu7CqqiqZzDz44IM8++yz7Ny5E7vdLruhhTJJOG+xxoWFBXbv3s1LL70kCdZwOMxHPvIRSdwKqEzMSBoZGeELX/gCdrudYDAoVXXvf//7ZROYwWCQkPMvY79Wjt7lcnH16lX+8A//kL1792K1WvmLv/iLOx50IQKAQqGQ0+J27dqFz+fjvffe4+jRo7jdborFImfPnpXdk0ePHuX111+XeK9QUwhJ1fe+9z22bdvG/fffLwkkUVLb7XapURdTCHt7e/F4PDQ0NHDw4EG++MUvSm1sPp9nbm5OBpM//MM/5K//+q/laIHOzk7+w3/4DyiVShYWFpibm+Py5cvU1tayfft2zp07R0tLi+xAvV1B8OKLL6LX6+V4BaVSKTsNRdkqPpdarebzn/88c3NztLe38+yzz/KjH/2ISqWCzWYjFovJCslms+FyuST0EY/HSafTDA4OcuHCBdmdODIygsPhoLq6mo2NDQYGBmSWrFKpyGQyBAIBXnnlFQ4fPswrr7wiCddyuczKygrhcFius6WlhVAoJH/3wAMPkM/neeyxx+SIgNXVVYLBIKOjo5LYEwPL/vZv/xaFQiHhmJ/97Gfo9XpJtJ86dQq45RRqa2u5evUqdXV1lEol5ubmaG5uZnp6GrPZzEc+8hEZuCqVWw9ROXXqlFRCCVXX0NAQ7e3tALKRzG63k0qlZJu9aIIpFossLCwwOjrK/Pw8ZrMZl8vF0NAQW7ZsYXp6mqqqKrlfXC4XjY2NMnOPxWIsLCzg9/u5fPkyn/zkJyVJCGCxWDhw4ABvv/22HLMsRhe88847lEolVldXuXbtGm63mzfffJOtW7cyOTkpA+3NmzfloMBMJkMikZCclUimzp49K4l2Mc5ieXmZl19+mV27dskJjz/+8Y+566670Ov18oE6on9BmOhGt9vtmEwmnnvuOQ4ePChljA6Hg4WFhTsITY/Hw/nz5wkGg4RCIdLptJxYWV1dLSvF559/no997GOyUhQyxEqlwu/+7u8SjUYZHx/HZrPhdDrlfdNoNKyvr9/h6MUoZJvNRjKZZO/evbS2trK6usrCwgLf+c53CAaDUiiRyWRwOBx897vfZceOHZw9e1YmaaJn4vTp03I8g+iiF4MCV1dXJdFtNpsJhUJ8+MMfxmq1Sm5NQJCicv9F7dfG0SsUCu677z7Z1BCPx/mbv/kbbDYbkUjkjsaCcrks9b9DQ0N897vfJZ1Os3PnTvx+P5cuXaK9vZ2GhgYZAKqqquSMaDFBTsjGRIbv9XqZnp7m/vvvp6WlhcnJSRntxQUul8uyTVyr1fLOO+/wX//rf5Wzx4WawWAw4HQ6uf/++zl79iwKhYK5uTkymQzXrl1jcXGR7du3U11dzcLCAplMhlQqxdTUFJlMRmJwCoVC6msNBgOZTIZ8Ps/JkyflICyBBYspe4CcjfLcc8+h1WoZGhqSeLaYly1gAXGYlpaWJHkp5qjU1tYSCoWkmqFQKBAKhVhZWSGfz3Pu3DnZ1KPT6eRgq2w2y+TkpDwAfX19MljY7XZ+/OMfS9ippqaG+fl5jh07hs/n4/XXX5ezuZeXl7nnnntk5ir4CTFSOhaLoVQqGRkZIRaLsWfPHkZGRqRTAmT1cf78eVwul3xal5BpCsWWgMOEeqW1tVXuTYPBgNFo5Bvf+Ab/7t/9O8xmM6+++qrE7ru7u+WYaqFMErzE5OQkzc3NHD16lPfee49sNsu///f/nrm5OX7+859TKpWk4iYQCEjn/dZbb3Ho0CE5nqKtrU1K8ATJJyo4QBJ74nkJQoacz+cxm80MDg7ymc98hm9+85tyborgvcTI576+PsxmMz/+8Y9ZW1vj8OHDFAoF+TAX0Uktxhp/4Qtf4LXXXiORSLBnzx6am5tlM5VYTzgcviMJEZVnuVyWxGMul+PkyZOSVxL9EOIeLi0tyUm2n/zkJwmHw8zMzLC0tEQul6OtrU0qxkZHR2XQ0+v1zM7OSs5D7GPRqCjgNUGkChGFUMGFw2GpmBKjUV577TU8Hg8+n0/KihUKBVVVVbzxxht4PB6OHTuGwWBgcXFRwr2FQoHq6mqOHz/Os88+KytpQI5ZHxkZIZ/PSx8mRjjbbDbZLFkul2lsvP25Tv+8/dqobiqVCn/3d39Hd3c3N2/e5Ic//CEmk4lMJiPVAUJPrlaruXTpEqdPnyYej7OysoLT6cTr9bK0tEQ6nWZx8daDVwKBALFYTLaQi5stnmQl1BPC1Go1Fy5coKqqioaGBpLJJOFwmN/4jVvPNvf5fBSLRfL5PCdOnJCt/MLBA7Ixx+/389xzz3H69GlJzAgSTqfTcfHiRd566y0qlcodrdPidcQsD9EBLOSPGo1GPmlLdBB3dXWxf/9++TmEfE1cW9G4JXgDIcdMJBJSOheLxfD7/VLBIrovI5EIvb29sqoSaxJkkSBZ/X4/TqdTKhXE07b0ej1zc3Ncu3aNvr6+O7r6zpw5w/j4OB/72Md48cUXmZqaQq1Wy8dAFgoFBgcHWVtbk8QW3OJdYrEYuVyOvXv3Sqgkl8vhdrslZCaCOiCHhoXDYUmUB4NBmVyIh7oIbkMMMKtUKoRCIbxeL9/61rfI5/N4vV6p6LBYLKhUKp577jmZHcIthyZGHSgUCmZmZuTMnUKhwLZt22S2KIKMmAw6NTUln14l3t/v90s1UCKRkGow8X6CcKxUKqysrKDX62lvb8ftdkud+dramiQnxSiC20ccnDlzhtdffx2LxUJVVRWlUomuri7pyERPiAgor7/+Onv27JHPfxCdqlqtFr1ez9raGjqdTpK84t6Jx30Gg0HW1tYYHx8nHA7LgWJC0Sak0UJ6KUZXjI2NEYlE0Ov1uFwuFhcXZS/A2tqaHEMs+JK2tjZGR0eZmJjA4XDIZibhzEWCcvvetNls8tkG4ilnb7/9tlQBplIpWfGUy7ceFSqG3ImRz2KYXbFYlEmVGGGysbEhK13xfuLhJx0dHSQSCfkMANEzIqqGX7Zh6tfG0cMtp6xWq1lYWJCYNCCbeITeXcjjBJ5vtVoxm83kcjnW1tZku7N47JyYzSE2t3iohYAahNMTs0WEckc4iw9/+MMEg0EAdu7cKQldIU0TUIE4dKXSrceUORwO6cCFEkWoeKLRKC6XS8ouxVwM0S4ucG1xqMSYgWQyKUvqfD5PLBYjlUrxwAMP3LFJBRH1/7D35dFtllfeP0nWZku2JGv3Jm/xEjur7TixEychgcQkJQsBQgmFQklZOrR0YJb29HRKl+m0A5RShkIpaYCSkNCQpGQhZF+dON7ixLstL1ptWbY227JlfX+Ye5E7Z85HOzPf0PPNew4nEGLn9avnfZ57f/e3UCVCPz+9MBTIQvdPA24yK0tISIDZbGZBGYVN0AtMz02lUnEEJHU1iYmJmJiYmEXlHB0dxcjICFslAzMbKB24v/zlL6FQKOByufg+6bnQMxWJRAyJ+P1+TE1NISkpidWyNPAlPjS5gJKamKxtaVBJNr6RyEz+wODgIAYHB2cZjNHV0tKCyspKnDlzBkqlkrtFnU4HiUSC+vp63lgmJiYgkUiYoaVSqdiiePny5bPSnIgtRXbQxPhJT0/njSN2A6euUaFQsGketfEulwsDA87Gq9gAACAASURBVAPMABsdHUViYiJXkp2dnZzERfMu+jnJc2f+/Pkc7kPpThTtJxaLZ1FGyWn2woULnL1MFGLivlOOQaw9R01NDUZGRhg2LSsrQ25uLoqKipCbmwuDwYDBwUGea1EuBa0lg8EAs9mMvLw8TE3NBPYolUq0tbVBp9OxTgQAH2JtbW38jOneyA6b2EmUABX7DrlcLu5MRkZGsH79eigUCgwODvLaoneW3p2xsTG+T4KwKHYxISGBDRhVKhU/N9rgW1tbYTKZ0N3dzb/v8XgYyxcIBBgaGuLO4/NeX5iNXiAQ4JFHHkFeXh7a2tq4JY49aamiJLETVWBEoaP2RyaTwe12c/QXtXzUdlLFKZPJuL0lsVEsJYtYLzU1NVi1ahWAmQENtaNUSdGmRtxvUoOOjo5ytCEpYsl574477mDPcmJXSKVSxk3JYpUWUOxmSrBE7Eb4wx/+EOnp6fw8CXMkimgsd51EPvQPHUz0jBMSEuB0Oln0c/fdd0On0zH9lAaBItFMrmdnZycPiYDPlKek4BsaGuLnOTIywkHvAGZRRunPUXdEhxJtMFRZBYNBDmagKm58fBxbtmxBVlYWK3kJbiGb6lAohI6ODqxZswZisRi9vb08WOzt7cXNmzcxPj6OxsZGmEwmhqSi0Siam5tx+PBhxovb2tpY6EYcauoYqeolkz1ghgaZlZWFgYEBtLS0oKCgAJFIBKmpqXyQxR66N27c4DjFpqYmLFu2jE36vF4vd1p5eXlMf3Q6ncjLy8Ply5exb98+DmGRSqU4evQoK73p3aJOjNw6u7u7OfmMXFdj5x2EM1NRI5PJ0NvbC6VSyfoK8hWig5pon3SPAJgEoNVqcf78ee6IBwYG4PF4kJaWxs8hVnxH7pDJyclISEhgs7bJyUmmYodCIdZPEBc/FApxjoDJZML69et5DkWq2dHRUZ6N0H4klUphMpkwMDCAsbExppempaXxu0NdJhmWGQwGiEQiPnyInkzma0qlkj2H6P2mv5PYfUTf3Lx5M9555x0+8OgwJtjsz7m+MPRK8k6/ePEiY8E0hKUNnoYv5AhHC6G6uprtfgUCAXJycrh9pE3n4YcfRm1tLW8cVDXT4ohtf2mYplQqGcNfuXIljhw5AqvVyhUvRcORK2KsORHh/8R3pg8xGo2y0jfWyIr+TuLBE5xEC5k2Q2BmE9doNJyXKxaLkZeXB7PZjCtXrvCfoYqXNnGJRMK+M8Bnsnl6trFKYnq2hYWFsNvtnOCUnZ2N/v5+3lDp+ZJUneAWALOgImrDrVYrli9fjjOfxrXR0IygKfrM6EBJSEjgZxmJRLhNpsrdbDajtrYWGo0GXV1d7OHd19cHuVyOoaEhrurIbIzsiGnQ6/F4sHr1aly9ehVOpxMOh4NthY8fP87P02azcUXY0dHBVrs0nCaKJGk1kpKS2ITL6/UiFArBYDCguLgYAwMDOHv2LGsf6LMgOIaGohT60tPTg9tuuw0ffPAB+vr60NXVBYfDgZKSEqjVahw7dgx2ux12ux3Xr19HUlISNm7ciBMnTvDPvHr1ag5Dj12vS5YsQXt7O4AZnUFOTg5kMhkXDmfPnuWCi1TFBE+KRCIMDg7CaDTCZrOxvTNx3GO9+MlZVa1Ww2Qy4aWXXuKAFZoZkAiPYCpajyQyo3eDZnSBQABarZYrZYruI3Us2RyPjIxApVJxdrLRaERNTQ1KSkoQFxfHqAAAXLx4EUKhEBUVFZiYmMCuXbvQ1taGlStXMuWUPJhobVDhk5ycDIFgxjVzwYIFCAaDyM3NBTBzeJBtMzHGWlpaMDk5yXM4EnTeeeedCAaD6OvrQ1JSEluujI+Pw2g0QiaTEfvov59eKRAIrAD8ACIApqLRaIlAINAA2AvAAsAK4J5oNOr9j75H7EU4WuzGCWCWL8v4+DiSkpJgMpnQ0dEBsVjMzpF0Ol65cgV6vZ69Z8LhMOOjVB3Ex8fPesFo0dImIxLNxHsVFBSgp6cHf/u3fwsArDokjJqqGErIIbET0RXpxP/Wt76F119/nTdyGlj6/X4olUruLJ588km89tpr/HPHbsYEC9DCSEhIQHJyMux2O3tk05WTk4NwOMxybDJ9o0VIghhSWNIG+9xzz+FXv/oVu082NzdzNRIOh1m0tGHDBrz00kvcXg4PDyMzMxNyuZwrd5vNxkrTWPprbERfeXk5py/R88/KyoLf78ddd90Fv9+Pw4cPQ6lUMleZDq5AIIDBwUGGN6RSKTMa0tPTOTy6rq4OABjaMRqNuHnzJldearWa6ZddXV0QCoV4//332T2ULvIxEovFWL58OZKTk3Hjxg1oNBrWZtALPzU1haeffhovvfQSfD4fNBoNOjs7OZWJ1tjg4CB0Oh2effZZfP/73+fDjO41Gp1J76ID5LHHHsMbb7zBz/Pll1/GfffdBwBsabBz5050dHSgoaEBAoGARUKZmZnsFyWVSlmfUFBQgKamJqjVauzduxcTExM8/BOLxcjJyeFZVk1NDa8VuqgKJXGW2WyGy+XCgQMHWHRlsVj4z5On+v333w8AzDihQBjyoaFiRSAQYMuWLXjvvfcgkUjQ0NCAxsZGpi/fvHkTSqWSMwnI/I2qbjIFi4+P54jE5ORkFBQU4OWXX4ZcLkdlZSWbGAIzRdCLL74IsViMTZs2ISkpCSKRCKOjo1ywxXbGNK+aO3cuDh06hKamJi5camtrOTiJIOOhoSFotVrukqmoJcfXxMREjI2NYeHChbhy5QqOHDmCe++9l4V3scSLz3P9V0A3q6LR6ILoZ7mFfw/gZDQazQVw8tP//lxXa2srb25UKdJLQWImOqEHBgagVqthNBoZZyUTIY1Gw2k5NAxbtmwZfvCDHzDmV1paiuLiYsTHx3PFRx8YvVRSqRQOhwOPPPIInn/+eQBg/j7ZkRK7gBaTXC6HWq1GYWEhIpEIAoEA0tPTGYOjIRYNuOh0pqpep9Pxhk4UrPXr12Pz5s28WAlLJwiJAgxMJhM/y97eXg56IP8T2gzD4TAWLlyIwsJCbgEDgQB+/OMf84FJHQ1ZEqxatYodAGlOkp2dzQcQWfV2d3czhlhZWckvhVarRWZmJn+mdN24cQPBYJArmry8PNjtdmg0Guzbtw83b95EfHw8w2jhcBg//OEPGUoSCARYu3YtFi5cCKVSieLiYuaLl5aWory8HP/4j//InQzBCSkpKZxWVFZWhqmpKTgcDpbWl5eXz/IooWdMSlTyraEDqKioiCuuSCSCH/7wh7MqUDISEwqFPDshPHhsbIzprPSiT09Pc9KZUCiE2WyGXq+H1WrFmjVreFCcmpqKffv2AZgRdTmdTuzfvx+3bt1iZ9Senh6Ew2EcP36cuedEq/3pT38Kh8OBcDjMeg+DwYCpqSmkp6dDoVDAZrPB5/Nhy5YteP7553l4THMluVyO4uJihhbp/Xv22Wd5/mC1WvkzJ1Gk2+3mgkKhUEChUCA/P5+9Z8j//oknnoDBYMCiRYt46E7mZkqlkhOnxsbGEAgE8N3vfhc//vGPZxEbJBIJ7HY7KioqOJ+5vLwcjzzyCMds7tmzB7/4xS/4PpOSkvCtb32LO0uaS5FJnlwuR0pKCnexFFpD72d9fT3q6upY1ev1ejE4OIgNGzbwgJ3eS4JgaQYHzHTzWq0W9913H7Zs2QK73Y4XX3wRe/fuxZ+LxPx3YPR3ASDVxe8AbPq8XxjrLUOVeCyrIBKJYPHixdBqtZicnIRer8f27ds5aZ5wMq1Wy4wPWkQ05d+0aRMmJibgdDqhUqlYjUd0PXoJaGPwer3YvXs3JybFOj/SCykUCll4MTU1hVWrVmHZsmWsnrR8GviblJTEnQopZYnCNzk5yXzz559/Hm+//TZ8Ph+HV+/evRu5ublcWRBLg35msg6mi+YPJL+mKjc9PR15eXnQaDSYmJhgrcCTTz4Jj8fD7JzJyZkg5tbWVmi1Wpw7d44P3dtvvx2RSAQPPPAAsyISExMhEMzksubk5LDog3xFnE4nMyNIPi4QCHihkx+6wWBAXl4e4uPjsXz5clZh0uL/h3/4B4TDYVRXV7O1Ql1dHTweD7RaLWpqajA4OMjmdSaTCQqFYlZHRBUcCVays7NZpUp2GrW1tdzKU/VNKVlkvaHVaqHRaFBcXIyLFy8yFPjUU0/B6/VifHwc27dvh0KhQF9fHxobGyGVSjmQhGCZBx98EBqNBq+88gpDeASn3X777cjJycHk5CSsVitsNhsaGhoAgM3H6D49Hg9ycnJm2YXQPKOwsJDnWDT7+O53v8ueR0RjJi96gtzImI1S0Hw+H37605/yRk9XRkYGSktL0d/fj5GREfj9frz22mvsEU9W2QB4SN7Q0IChoSGepxUWFnKiGhU6RUVFzOSig5LeSzqcKCmLHE3dbjcmJiawY8eOWZ5FkUiEU6bkcjlkMhnTdv1+P4LBIO69916+z9HRUbz22mvw+/3sFRWNRlFcXMwkB7fbjampKVRUVKCiooIzqSn7IT09nZlyK1euhEAgwO9//3vccccdyMrKwtNPP83vZ6yfPuUFG41GJCUlITMzEyqVClVVVaxG/3Ou/+xGHwXwsUAguC4QCB779PcM0WjUAQCf/qr/D7865qJqenp6GgsWLIBEIsF3vvMdZGZmYtGiRXjsscfw6KOPQqvVwuVysc+2VCqdNYSkVJje3l7m3NPGIhKJsHbtWubB0/9/9tlnUVlZiZSUFKxatYqzHcmUiAaW9D1IyZeRkYHnnnsOaWlpsFgsWL9+PZ5++mkcPXoUb7/9NqRSKe68804sXrwYExMTeOSRR/hDHR4eRltbG86fP88Crr/5m79hWKa7uxvp6eno7OyE2+3GSy+9hLKyMmRnZ2Px4sW46667eOBIFcT+/fv5OQSDQZhMJmg0Gjz66KPIzs5m2b9Wq4VOp8PVq1chk8mwYcMG/rq4uDhs2LCBcUsKeybu/dTUFObNm8fDuW9/+9tYuXIlfD4fbDYbO/olJSWx6VRWVhbi4uIwb948tpr4dH1g4cKFMBqNDFNQa52VlQWfz4empiZMTk4iOzsb3/jGNxAKhTAyMsKbGABWeXZ2djJHfvPmzTyI83q9+Pu//3vk5eXxpk3ZB3FxcWhra4PBYMCDDz6I3NxcrFmzhlXFdJ/btm3Dxo0bUVZWxsWIXq9HSkoKQqEQdyXEde/o6EA4HGavdOpKCRcfHR2F2+1mz3o6WL/73e8ye4o2Jp1ON4ty+8QTT+COO+7AV77yFZSVlbEpXnFxMTZt2oSysjJmeZHdQuyMSCqVYseOHejo6EAoFIJSqcTixYuhUqnQ39+PQCDAvj4OhwNCoRBPPfUUlEol1Go1Jicn8c1vfpM7WDJk8/v9sFgszGjZtm0blEolnnnmmVmsm82bN2PHjh247777kJ+fz5YPgUCAITDaSAsKChAIBHheQWyiQCDAMZNk7hYOh7Fjxw62I9ZqtSx+JKiU5m5utxvNzc04deoUD1Dz8vJw+PBhvs9vf/vbmD9/PmP2VqsVcrkcTqeTobO4uJlUsrKyMrZCJwsVyhcg47OamhrWjRB3Xy6X41vf+hYXa9FolOcMpHy22Wwcs0mJZ3/u9Z/d6Cui0egiAOsBPCkQCFZ83i8UCASPCQSCWoFAUEu/Fx8fj4qKCsyfPx8//vGPceTIEZjNZjYmUygU7Fp5//338yZMPFsaZrjdbt5ojEYj08Gi0Sg8Hg8KCgrQ29sLq9WKoqIiNvAqKSlBe3s7du7cCYvFAoPBgPLyckQiEZSXlwMAe+NkZGSgsrISly5dYmM1EmOEw2EEAgGYTCYUFBRAoVAwFZLYNFNTU8znF4tnErOoWiTxTkVFBYLBIHp7ezE6OorMzExkZmYiLi4Ora2teP311/H888/ja1/7GoxGIw+C6SL+9J49e9isLDU1FSkpKSw+8vv9TAGkWQUtMlIdUiVDnQvZ65J/h8FgYCggGAxyEhDFC/7kJz9Bbm4uRkdHsXPnzlmV4PLly2EwGFBWVsZ+6jQsNxgMHLZOA+I/baPp0mq1MJvNXBHp9XoWxxGDgp6Ry+Vi6wVaI2KxmL3FhULhLEyZGF63bt3CsWPHOJCFJP4kZCktLcW6desgFouRlZXFNDsaqE1PT/NhSQfAunXrOGaPZjsmk4m7g6amJkxPT7PAR6VSITs7G2VlZWhvb2f4BACMRiNcLhdycnK4I5bL5bBYLLOG7CtWrEAwGGRu/cjICK85wsXJTjrW/ZX492TLTGuADlOj0Yjc3FyIxWIYjUb09/dj7dq1uH79+qzPin4u8hKiDjM1NZVFjWNjY1ixYgXy8/OZeQaAK2Z6b+jzobUnFApZjDU4OIiSkhKeZ4nFYrjdbqSmpuK2226DTCaD1+uF2WzG/fffj8HBwVlhM5RxTHx4cqDUarX895JlCkFxcXFx+PrXv86iMZpdkHaCiCTUyRIJZcmSJVw80bvr9/vZrpk6noGBgVnK6M97/ac2+mg0av/0VzeAAwDKALgEAoHp0wdhAuD+D7729Wg0WhKD7SMQCKCxsRGtra04fPgw0tPTudUkubBMJsP69esxPDzMlTUN42hQSxuF3W5Hf38/Vq9ejdbWVq4USktL8eqrrzJVLSEhAfPmzYNAIOBIQqLKNTc3IxwO45lnngEAxtotFgtcLhfEYjFX1dQmBgIBLFy4EA8++CCHChBnH5gJRyaoxWQyMVRElRmpKnNycvCrX/0KZrMZZ86c4YjEsrIyFBQU4J/+6Z/w29/+Fnv27OGhK13Jycno7u5GQkICGz2R2Kuvrw8ejwfj4+O45557ZlFDSXVHGHFfXx9z1ImWSpW+SCTC2bNnMW/ePJSWlqKoqIihLcqszcrKwptvvsmw0q9//etZENOvfvUruN1ujIyMoKioiC1ozWYzs1gee+wxbNmyhatHehl37tzJ1gkdHR3MbaaNPlZ41dvbiyVLliAvL483baVSiYKCAh5qX7hwAQaDAQaDAS0tLdwdRKNRvPPOO2hubsaiRYug1WqZr56ens7D7Llz5zLXnTZfgUCAnTt3srIZAHeMADA8PMzrHJipSnfu3Mk02vb2diQmJrJKMi8vD6+//jpuu+029r6hv8vr9SIYDMLj8aCqqgpSqZQ/c5vNxh72xFWnzT8cDiMnJwdpaWkcXk7zkLKyMnz/+99HfHw8H1a0DubPn8+bG3WAoVAIcrkcbrcbJSUl8Pv9uHbtGj9LYIYGSrOEUCjEtFoyWgMAnU6HzMxMdHR0zIJ0N23axANegndGR0eh0+mQn58PjUaDzMxMNqbbsmULtm/fzrOonp4eFkilp6fDYrHA6XTihRdemJXbCsykn9lsNmzduhWjo6NQqVSYmprC6OgoE0YWLFgAh8PBpoLhcJiH02q1GuFwmKnKZNswPDyMiooK7u5tNht27NiB9PR0podfvHgReXl5UCgUyMrKgkqlwoEDB5id9udef/FGLxAIEgQCgZL+HcDtAJoBHALwlU//2FcAHPy835PaGb/fz4NWYkUkJSXh448/5oEYDT1GR0cxMDCABx98kDdSg8HAaT2FhYW88RBdiyrov/u7v0NraysHYdOALyMjA729vVyJkbQfAJ/Qp0+fZhgkNTUVMpkM+fn5uHz5Mi94EsPQy0RGRCLRTAqO1+tl6+K7776b22uq+iUSCW7evIn+/n6mxJEb3sTEBJYvXw6fz4eqqqp/l3EaCoWgUCjQ0dEBmUyGwsJCZvhQ7NmiRYug1+sZMiF+NGXGEsRBE365XI5nnnmGK1OiuYXDYWzcuJG7pXA4zC8TqY+PHz/OqV/UatPz7OzshNVqZXtowvL7+voQFxfHWoCJiQlWntLgjbqrkpIS7tpiWRHUXej1ekQiETz88MOwWCyoq6tjKiNJ28ViMX7605+isrKS4Sm6FixYwHMAiUQCr9eLQCAAq9XKVtD0WZNVLzGDZDIZUlNTEY1GkZqayvxuiUQCo9HIhyZtXAKBAAsWLGA31sHBQXR0dKCrqwvd3d1ITU3F8ePHcevWrVmw5dy5c7F48WJ2TqX5kc1mQ3d3NyKRCAvrIpEZS22Px8OwE3VnRCbQaDSw2+3c4RGjyG63IxgMIhAIYNOmTXzQ+P1+DltPS0tDU1MTzp8/z372dGk0Gqxfvx4ZGRkYHx+Hy+WC3W5HTU0N6urqIBaLsXXrVu62AHDHSJ1TcXHxLOYZZQEQIyhWc3L16lVmak1OTiIpKQk2mw39/f2488470dzcjEgkwmpiuuLi4rB///5ZPH+bzYYjR45genoaCoUCy5Yt49kA6XjGx8cZx49l+9Bhds8993AiGqWWDQwMMLRIxaRYLOZ9gmw6YguGP+f6z1T0BgAXBAJBI4CrAD6KRqPHAPwzgLUCgaADwNpP//tzXffffz8mJyeZzUACA7VaDa/Xi/7+flRXV0MoFMJut6OrqwtTU1PM03344YfhcrnQ1dWFoaEhPPTQQ1izZg0eeOAB+Hw+JCQkoLGxEcFgED09PZBKpZw6lZeXh4SEBGRnZyManQkDoQ/zmWee4QWwfv16SCQShEIh1NfXQyAQQKVSITExEVarFW1tbYiPj8eaNWswOTmJgwcPoru7GyMjIwgGg/j617+OYDAIuVwOv9+PK1eu4J577uE0H/LaB2YwWrVajXvuuYcpo0SRKygowMjICFpbW1FdXY1169ZxSwnMWD6bTCbYbDYODykqKuIAhfHxccyfPx8Oh4PtIYh/PDIygo0bNyIUCmFqagodHR1QqVR46qmnmD5JVR2ZY0WjUbYRJuqpxWJBcXExfD4fAGDdunV4/PHHZxlHxcfHQy6Xo62tjdko5eXl8Pl8sNvtUKvVaGpqQm1tLTMdKCKQ0reEwpkQd/p7v/e977GtgVA4k4Zlt9uxd+9e+P1+LFy4kO0tKNjGZDLBYDBAKpXi61//Ogdu00VVOvHoU1JSGNrS6/UoKSnB0aNHWYRDikjqJtLS0hiqIMx4586dDOdRp3L9+nXU19fDbDajrKyMK3/6XkVFRdizZw9+9rOfYffu3bh06RJXob/73e/w/vvv44MPPmAYhhS5drsdEokEx44dQ2JiIgKBABwOB28a09PTHKtoMpm4oHE4HFzdU4gNhXt89atfZTz/7bff5mKBhF8ff/wxa0XICRSYyYp98803cezYMaSmpnIsZldXF39tLEON9DOUP0Cq58zMTCQlJaGiooL/nYRnZDcSjUaRl5eHBx54ANHoTGBPTU0NXC4XpFIpTp8+DY/Hg7i4OO726JqYmIBUKoXVamVbbgpyHx8fZ0FgfHw8EhISZulPVCoVz1bGxsZgsVhgsVgwZ84cxMfHQyQSwWQyMZ2Titby8nJ4PB7cuHEDFy5cQENDA1u7UOxjSUnJrM7j81x/8UYfjUa7o9Ho/E//mRuNRn/06e97otHobdFoNPfTX4f/b98L+Mwfpry8HImJibh69Sq8Xi/TAaniSkxMhMfjgU6nQ0pKCjvX0WkPzAgyVq5cCWBmAd+6dQsSiQQ2mw0LFy7k4ZHD4cBrr72G1tZWrpTj4uLwb//2b5BKpUhNTcW8efNgt9tRVVUFAGy+Rfmf4XCYIQYaMi5YsACjo6MsUrFYLBCJRExBfOaZZ1BQUIA77rgDDzzwAL/koVAIGRkZOHz4MMuzJRIJgsEgjEYj3G43hEIhDAYDotEojh8/DrFYjNraWjz00EN49NFH+Xk6nU4eEBHOS4yimzdv8p/TaDSMS1N7Ho1GoVar8eSTT6K6uhpf+tKXMG/ePEQiETaL0mg0UCgU6Orq4rQggUCABx98EC+//DJ7z4dCIRw6dAhr1qxBXV0dXnzxxVnK2Pnz5zPr5fLlyzxYJXHNwoULuVIVCoUYHh7mIiA7Oxu33347UlJSOEglLy8PgUCAPcBpmDg+Po5HH30UYrEYCxYsQFtbG/bs2QO1Wo0FCxYwv5+ebSwFFJjx98/Ly8OuXbvg9XqRnZ0Nt9uN119/HYODg8jIyMDWrVtZLBW7rilHlozNHn/8cRQXF3PlGQ6HOeFr06ZNWLJkCVJSUrB27VpMTU3hlVdegU6nw6JFi2C32yEQzEQ4EjOH1v26deuYsfLBBx9wd7pv3z5Eo1E89NBD2LZtG0KhEMOcxNkmIRAdollZWUhPT8fatWs5A5agUoq8CwQCKCoqwubNm6FQKHDhwgUIBALMnTuXh5qbN2/mToeuF154AXfccQdrOMRiMXbv3g2PxwOJRILHH3+cFbo0VJZIJBxYolar2X6c8G56DgSl6nQ6LiiWLVuG9vZ2FBQUQCqV4tatW7Db7WyjnZKSgm3btqG/vx9ms5nvc9myZTAYDLh+/Trq6urQ1NTEB6tWq8XSpUu5cyI1NDHTdDodcnJy+N0gT6Zt27bNUubT+yQQCLBt2zael4TDYY5JPX/+PJRKJTvrdnR0zOo2P8/1hVHGEm1v06ZN2LVrF1wuF3PFnU4nDh8+jOeeew4ymYwdGIEZsQZlNZKJ05UrV1BRUQGxWMwUR1KQkpKOOoUzZ87g2rVrzF994YUX4PP5sGbNGixfvhz79u1DQUEB3nnnHUxPT6OoqAhKpRKlpaU4d+4cS+GpA7h+/TrUajUzYohXnZWVxcwEqVTK/GRSx8UOaMRiMU6cOIGqqiqMj48jGAzio48+gslkQmtrKx9QhO01NTWx18r169cBzEjuOzs7sXbtWnz00UdobGxkOp7X62UVbGZmJqanp/m5UlVGft5erxcqlQqFhYU8PCIqmtvtxpYtW3h4J5FIMDAwAIlEgnPnzkEkEuHtt9/GxMQE8vLyMGfOHB7gEV1127ZtOHfuHMxmM27cuIG6ujpkZGSgubkZY2NjuHHjBiorK3nzJO96p9PJ1RB5kRQUFDC0AnwmYycLZnIc/d73voeXXnoJZ8+ehdlsRl9fH9555x0W0iUlJaG8vBw3btzgd4pr9AAAIABJREFUNbpgwQJWhzY3NyMlJQXHjx+HTCbDXXfdhb17986ig8Y6LwoEArS2tiIajcJoNKKrqwvLli3jdLNgMMgHDLGSlEolrly5ggcffBBnz55lmi9pALRaLfLz85GZmckH9z333INr164x5HPr1i34/X709PRw9sHw8PAsei7ZRwAzVaVOp4PT6YTBYEBDQwPmzp2L5ORkNtWKVSoTsyUjIwNLlizB7t27YbVacfz4cXi9XmzZsoX54S6Xaxb86fV6sXLlShw+fJhFb3q9HmvXrmW3SBJQUddG0GI0GkVTUxOzXtLS0niQPTk5yeQLUlATfXf16tVYunQpDhw4wIwjhUKB8vJyDA0NweFwMFwFgLsNgvjIWXTRokVYuXIl+vv7GdolUSAAJjSIRCJ0dXWxOj4tLY3fK6K40gySuhaPx4Mvf/nLyMjIQHd3N8OqOTk56Ozs5BkZ+YDhrzFhKjk5Ga+++ioWL16Mjo4OOJ1OdHV1see73W7Hvn37kJWVhYmJCQwNDTGDgUKVw+EwKioqWCVIlSZN+gsLC/mDoA30y1/+Mnp7e/Huu+8yP5hi/QoLCznIm6oag8GAjz/+GHPmzIHD4cDAwAC6urqwdOlSLFq0CENDQ/joo4+QmZkJAIxxkl8NqeGoMlWr1bMsHebMmYPCwkIAgMPhwNDQELZt24bf/OY3EIlEOH36NIRCIfsCPfnkkwzlkAVCWVkZSktLcevWLTZG6unpwdDQEORyObZu3Qq5XI4TJ07w5kiVLKVpUWYpRaspFAoebpLsPxAI4Pz588wy0Wg0ePvttznlKRqNYseOHUhNTUVWVha0Wi1yc3Nx6tQpADPt8d133w2z2Yy0tDS0t7ezVXNxcTEPHHt6ejhrlFwLCcoZHx+HRqPhEGWCHerr65GRkcF2GDdv3oTD4cC2bdvw+OOPY8OGDbhy5Qrq6+sZFisrK4Pdbse2bdvw0Ucf8RpNTU3lUI/JyUm0tbXxIPLy5ct46qmnmD1DbqsKhQJut5uZQhMTEyzDdzgcMBqNnKam1WqZ411TU8Oagm9+85v453/+Z7S1tSE7OxvV1dWYnp6GSqVCfX09bt68ybOZ6upqrFixAm63G8PDw1ixYgUGBwcxf/589loXiUScf0trjg5wsqMmGX9eXh6cTidHSIrFM/m6DoeDw4H6+vrw85//HGvXrkVpaSmmp6e5g+3r60NKSgq8Xi/sdjsPREUiEebMmQOPxwO3242FCxdi/vz5MJvN+OSTT3DlyhUkJCSgra0NfX19nC9BpnrkTpmSksI5AURVJMM3h8PBB21LSwt+//vfY9++faiurkZWVhbnAFRVVUGlUrEnDcFD9N5mZ2ejvLycCQrJycnQaDR49913kZaWhnPnzqGwsBBOpxMdHR2Qy+VQKpXst+Xz+ZCRkYH09HSYzWYe6k5PT7MP1r59+5CXl4dIJII9e/YgKSkJRqORMwq0Wi0nxtHwPcb2+a9vo1+6dCl7X6ekpLC6taWlBUlJSTh27Bimp6dhMplw8OBBKBQKpKSkMF9ar9fDbrdz9eb1eplr6/f7mQJmt9vxs5/9DE1NTQCA/v5+SCQSXujbt2/n4dWuXbvw7LPPAphhX6xduxYSyUyws91u5xjCwsJCnD59GjqdDqdPn+ZB4Pvvv89+KMTKIYtdavuIRaBUKjE9Pc1qwsbGRuzduxehUAjt7e2crESWulu3bsX27dtx7tw57Nu3DxMTE+jq6gIws9ETLXN4eJgricTERCQnJ6OhoYF9uQcGBvDhhx/C6/VykhBJyclPR6VS8cYW24oLhUI4nU60tLTA6XRy3F1bWxtCoRDuvfdeZkL84he/wIEDBzhIhC6FQsFxieRdrtVq2Y9EpVJBr9dj//79qK2tRSAQgNFoZDGY3+9nFgzRJD0eDwwGA1d9ZHfd2tqKM2fOQK1W45NPPuEOS6PRYGhoiENjLl68OMtDfWBgAFarFb29vaioqMDAwABH+H3ta1/De++9x1bZo6Oj6OvrYyfC6elpLkICgQCrWsmy2GQyMaY/ODiIYDCII0eOMJedPls6rPPy8vCHP/wBWVlZ0Ol0PNw+f/48jh49irGxMahUKhQUFMBoNOLcuXOM/x49ehRz5szhwzwSibD3OQnsxsbGcPToUeTm5iIQCCAcDkOv16O3txdarRZz587lWdTQ0BA2bNiAZ599Fk1NTSgtLUUgEEBXVxd/xuTtRBV9JBJBS0sL+vv7kZOTw/YAFy5cQCgUwle+8hWcOHECBQUFDNGqVCq0trZy507dGmHk9E4lJyfD5/MxdEieO5s3b4ZAIMBbb72FQCCAJ554Ajdu3EBDQwO6u7sRDAb586YDKSMjA/39/bhy5QrnDqekpKC5uRnj4+OoqqrC0NAQbt68ydGIBIHR/MNgMGB0dJQdQJubm1kFrNFoeO2p1Wp4PB6UlZXhnXfeQVNTE1avXo1oNIrBwUF0dXXB6XQy/TWGefO5NnrBX0K+/6++BAJBFAC2b9+Oo0ePMu1LrVYzhBMb8rtq1SocP36cfUDWr1/Ptp/nzp2D0WhEZmYmtFoturq6sHjxYkxOTuJf//VfecCakJDAFr+kiF20aBFsNhvy8vLQ2dkJoVDIrInm5mYAgMlkwsqVK3HhwgUkJCRgYGAA2dnZ/LIlJyejr68P8fHxKCoqwvXr1/mDvfvuu5mxQhxZu92O1NRU+Hw++Hw+7N+/nzE/4DOogrzDaYC6detWvPHGGwiHw8jOzmavEEqHT05O5vaefEHIGMnhcMxS1pHClMREW7ZsYTM0j8cDjUaD4eFhFBUVIRgM4sSJE2hvb2c2ASXg0MZRWFgIq9XK1a/D4cAdd9yBa9eusYc+5YdqNBqsWrWKZx1krkXVOtny0lAyNzcXHR0duPPOOzkrlwRBlOa0ePFitLe34/Lly8yFbmpqYoYN0TcHBgZgMBg40DwSiSAlJYVV0319fQxxkNcLibyuXr3KQ2haP7EMi7S0NHi9Xg4Np6+l4oOENR9++CH0ej00Gg0uXrzI34d4+mRIRjxxMmejTbOgoAA1NTUAZnj05POi1+tZqU0WBwRtUDSjx+NBdXU1GhsbMTo6yhqAxMREOJ1O9qOPi4vDhx9+iMLCQly9epU9Ya5du4bMzEx4vV6OvCRWXFJS0qwNMRQKsZEdWScT2YI6dJvNxrRmYsno9XqIRCKkpKRgaGgICxYsYGhnfHwcAoGA6c1DQ0Ow2WxsReHxeDA4OAi32w2pVMo+/sRC6+3tZQtgCj8hKiqtTdKT0MwmJyeH75XWUlxcHOco0zs6MjKCzMxMtj8OhUKskD927BgWLVqE5ORkjq3s6elhqiitIRrWNjY2chcda0n96XU9lqL+H11fqIp+cnISGRkZ8Pl8KCwsZMc/kgcHg0GoVCrcuHGDMTwSlhQVFXGoh1wuZwZGYmIiIpEIXnnlFebJkleHSCTiCoHCAUKhEFpaWjAyMsLcV2KpAGA+PGXCyuVypKenM+ZNFRzxZ2kz8Pl8sFgszGUmqiBtqEqlEt3d3XA4HACA0tJS9qAnybjFYkFbWxsikQguX76MqakpVv5SqlBspTw6OsqydqLOEYVVp9OxwIY4ytTCk40qaRJ6enqwfPlyNmlqbGzE9PQ0M05ogUciEU7TIf9sMnUjW12z2cxtLT1Pq9WKQCCA/v5+Zg5ZLBYePJIhGwCGIOx2O+bOnQuNRsMHFw2qScVLcwni11MwRk5ODnp7e1n9SpTWnJwcOJ1O5Ofn8+dPF23mtBZ9Ph9vAMQEIUGMQCDgYfrQ0BAsnwZ503Om6l2lUiE1NRXnz5+H1WrF1NQUy/2TkpLQ09PDSmxigFAnlZqayl5MBN0Qzk9VOTlC0u9FIhG2uKUIu4aGBoyMjCAxMREZGRksjhscHER8fDxbNXR3d6Ojo4OpmL29vaiqquLgHdp0ydPF7XYjLS2N/Z4IxgDAanaiILtcLs4XoM2WxHMejwd+vx8OhwOpqalwu93IzMzkjoQEXeQRVV9fj+7ubs6HJt9+ynoAZjpzCnTJy8uDz+ebZRlBz5MKTPJIIusSn8/Hds2xASZDQ0NcMMVqI0QiEXPqg8Eg9Ho96urqcPHiRXR3dzNcRPdJkJPH4+HhOOl0aIBLBz0+Z0X/hfGjB8AiIlKuxsXFYcWKFZg3bx5CoRAkEgkPPQlHLysrm2VqJhKJcPz4cZZIU2tObpahUIh9XkZHR9lZjxYntVhyuRxlZWWz0qcAsCy7ubkZFRUVCIVC6O/vRyQy4y3e3Nw8y8mSPuwvf/nL0Gq17LCnUChw8OBBPnCoyiLWRE1NDVfyZHZG/hmBQIDhgPT0dF4ksVAD4esmkwnFxcWwWq1oaWnhZPqenh60t7ezoZtSqYTFYoFWq2U/nUAggNHRUVgsFgwODiIQCGBychJ33XUXy9VJ0EKYeWdnJz9nGp4Rdzw1NRVer5crJgCM/Q4PDzN+PT4+zr4s5HsEfBb9JxQKsXHjRgQCAbS1tUGhUEClUgEAv5jkae7xeJidQgc8zXZIlk8tNMnlaYAXe0kkEh7M9fb2QqfTISEhgaEsoXDGqpk2lunpaSxcuBBf+tKXGP8msU3sy0yDOhpy0mdL69/n8/EzJHUy0Q7p8KGL4BGyox4fH4fT6WQPHwAcsh1LqzSbzVi4cCG0Wi0L9wj67Onpgdfrxfbt2+HxeHj2JRaLcf78eWaL0SFLB7NIJILL5eIBY6yzKnVeVBFTYUSfv9Fo5CElrau4uDj09fXx/IAGmWSAR4chqYBpPyDfIxIxGY1GTE9Pc5E3MDDAQ3D6OWI/c7fbzYc46Upow6X3OxgMwuVyMVttenqaBWlEKKF1Su9EaWkpv3vEfiKFtUQi4Q5senombhEAIwF/LrUS+IJt9IFAAKWlpexH7/F4UFtbyxu52WxmtzsyKautrcWcOXN4EyCFqFAo5I2MFKBkM0BVIVWhtbUzLgzBYBDRaBQZGRksACL/emrhxWIxzp07h61bt/JkfWBggA8g8rggqIHk7JcvX2ZVnM1mg9/v58MAmJkTKBQKXkQ0Xaf793g8jB1Su0oUMjr0YtWH1PpSZfqnts8ymYyrfLlcDp/Ph87OTvT39zPeSZvhu+++yxRA4pLTRpKbm8tScAoiofuJi4uD2WxmLjR1HrHUxVjfm6SkJASDQa54yX6agp+pZafNhCIUiXN/6tQpFuCQIEkmk7HjJq2r2K4nOTkZarUaIpEIbrcbWq0WtbW1/y7YgcRqdHhSlUcpWhQiQWlDSqUSNTU1bGtLDCEyh0tMTGS3SPre9HV04MTmFNPmqlQqodfrMTAwwNRRusi4jTbQxMRESKVSuFwuHsJLpVK43W5EIhEeYBJrjQ4R4tsTW0mn0+E3v/kNnnjiCUQ/tbeOzUqlzoYSmghmIJsP+szoIhdTqnRJwEjsG4fDwYwvgiwBMMQiEAjQ19cHn88Hj8eDS5cuIRgMIiEhAceOHUNRURGbqFEXJRaLkZCQAI/Hw6IkeqcmJyeRnp7+7yiLSqWSD1OVSsXhKlqtFna7fRariphMBK8R9XN4eBgOh4NDZOg5v/rqq8jLy0Nubi53/lNTU2zdQe8POc8CMwUJFXB/7vWF2uinpqbwk5/8BAMDA9BqtYhGowiFQjh+/DjC4TB6enr4tB4ZGWHckzYnAMjLy2NZdXp6OuOZgUAAHo8HMpmMh2EWiwU+n4+rRoqIm5ycxIEDB9Db28tujnRRq75v3z7U1tayp8vk5CTbLFOWaUJCAluu0sCNDgMKzqDBqsViQSQSwcKFC7mCo8qPPnjaYAniomGp0WhEIBDgRCQAPPQdGBjAmTNnGJ+fnp7mRCRKwALArSEtZlK0Dg0N8WGWkpKCSCTCMAPh1hRKQiKlxYsXM15tt9sxNDSElStXwmw2s4EbXUQfm5ycREdHB2w2Gx+4FPzc39+PsbEx7hJo86CDMD4+HjabDdPT02zARhTABx54ADqdblZqFVkXEGZNB0NBQQGzjmIrZWAmh4AgmZ6eHo48pJd7eHgY7e3tDJcQZEWVLmHy9DXk8kiHcGFhIUNaBAWQcRYApjPOmzcPKpWK2WGxdhIUrUmwJsEsBE2SCyNBJKTiJEpiX18fJ1LFQpnEXmtsbIROp4PL5WKDMcoY8Pv9XBkT5ZIgMerS6KIOmDJlYzsXi8XC1Ej6fOg+aR40NDSElJQUNqQzm838rkgkEtTV1c0S8pGqlkgJAoGAD0zSL9DzjT3g3W43P7+RkRE+JEgERrAwrTfaw+x2OyfQ0WFI8x6r1cqK+qtXr6KxsZHFmDQfoOJOoVDAYrFwoArNAf4SC4Qv1DD2L7mkUim3nRSqcPHiRRQXFyMtLW2WLJ5S4+mixKHYi9ql/+qLqq3t27djaGgIAoEAZ86cwY4dOziAnChXNHyhEJT/lxfdJwDuboaHh7Fo0SLG94k6Rwyf/4kr9j7pXmnzi73+J9c33UvsPRHsGPuMY3/9n7j+9FkC4I2WLnq+f+n1l8Tf/UcX3RfdU+x/x/76P33Rc6XPPPb6L7zHzzWM/avf6P/3+t/rf6//vf4/vj7XRv+fihL877iIriQQCLB3715uvQQCAVMHyWeCPDgIY6YhlVQqhUwmw5EjR1BeXg6BQMCUNsJRyc6W2nnKvPztb38Lq9U6S17+p4chDU+Jy/uHP/wBTqdz1mDJ5/NBJpNx3irRukh0RQnwBJdQN0IJWmQ6BczwkGn4SkrPPXv24OjRo4x/xkrhAcz62QhzHRwcZFUxDW6J1UAwGT174k339vbCbDbDbDajt7d3lstiYmIii3xomEisJJ1Oh/HxcZw/fx6HDx/mIdSfdkvEYgFm6LU7d+5kyT0NL+mzpSBrglVIE+H3+1lZSRizXC5nyI5a6/j4eMZOSQ08NTUFs9mM06dP4w9/+AMPxKijoova8OTkZJ5Z0Pcna4ZAIMBDZGJwEIuG1geJ5SgUh4LjaeBI90dQDwC8++67uP/++2EymXD27Fm89dZbs7KJ6ZkSriuVSnHw4EHExcUhEAgwF55gOgpF6erqgk6nQygUgk6nw8jICM9JaH5AbBpS0FLCGs0LFAoFUx2Tk5MRjUYhl8thtVqxd+9eniPEfvaUBUHwZ2VlJbNdfD4fvF4vz3Pi4uLQ2dkJnU7HMApBYzQIBcDvFg2iiQlF8B6tV9oHiIUkEAjwy1/+Ev39/bOUrfQ9X3zxReTn56OpqQkFBQW8Fq1WK6MBRBrw+/1s5EcMp6GhIYyNjcFutzO9kkLOCZqjfYQgGa1Wi6997Wt44403GCINh8O4dOkSjh49Oiv46PNeX6iKnlzhotEozp49y9j20aNHMW/ePDidTigUCo4N83q9PASjzZPSZWgISu2dQqHA+Pg4xsfHZ4l/aLAnEAjwL//yL/jRj37ErnhEJ/vd737H9/rrX/8aaWlp8Pl8GBgYYAy2vb2dsyuJuXLr1q1Z6lJacNTSkZskCXroA6Qh8eDgIDteEvXu5z//OdasWYOcnBwYjUa2pQ0EAti9ezff5/79+xGJRHDo0CFWU164cAFGoxEnT57kCEbyD6GNmFwJaTBMdDfaOMlLnzy2yUmSnmkoFILZbMbg4CAsFgtTQ4n/3d/fj7feeostng8dOgStVstzhGvXrkGv16OjowPj4+PMMSd3Qb1ez3YN9LLSwCopKQkejwfJyckspKLDktgKJEqjTSA7OxsulwsJCQls5UwH2K5du2C1WiGTyfDee+8hLi4O3//+97Ft2zacPXsWBoMBTqeT+eqpqalMo6SigwZ1LpcLoVCITczIqph83QUCAbxeL7RaLQKBAMxmM29YSqUSSqVyVuqa1zsTw6xWq2G1WvHKK6/g3Xffxe7duyGVSlFVVcXWxCTOow3IZDLNGgSThsPn88HpdDLJgJgmtEGRrxQxxWhdEPVZrVajqqoKVqsVw8PDPESl9+SFF14AALz55psYGhpCY2Mj5zXQxk5rjKzHaU2StTaxZADMsigXCoUwGo0YHByERqOBxWJBcnLyrEOJYNlgMIjbbrsNbW1tkEql7MlEsZ87d+5EXFwcvvOd76ChoQElJSVITExkO5BoNMosG5oHjo6OorW1lUkMdBBTwRX7fsfaNFDyXGpqKnQ6HQ+xafiu1Wo5DUupVPL7WVZWho0bNwJ/jdDNu+++y8lMc+fORU5ODl5++WVs376dK2XyrKZhEA3IyOqAFkbs4Cs+Pp6rlUgkAp/PN8seViQSobu7G6tXr8bw8DBeeukl3HvvvUhLS+OhyPe+9z1EIhGcOnUKQ0NDOHLkCGw2Gx544AE0NTXxgMXtdrO/xfDwMMxmM/OSKcmeOM7knUEdSHx8PPNmhUIhm7fFVuYejwd6vR5isRhNTU2oqanB448/jtHRUWg0GpAugtSU8fHxAGYGSz/60Y/w0EMPcbdD5mSTk5PQaDRcjdDibG1thc/nmxVMIZVKkZaWBp1Ox5UvebXEdjrEcsnJyYHVasUnn3yC73znO3w4fPvb30ZcXBx27drFxm2RSAQnTpyA1Wplewe3243S0lJmpNCmQfx/iiwkP3DiYKtUKqalymQyHiRT1SsQCDjVamRkBAUFBbyB9vb2orS0FDqdDl/96lcRFxeH999/Hz/60Y/w6KOPwuFw4I033oBUKmWPn6SkJBQUFMDlcs3SXxArh1gZc+fORV1d3aygD2KwxMfHs+U1hegQVY8YNGS8R1m1H3/8Me655x48/fTTOHjwIE6ePIni4mJEIhGcOXMGR48eZYtbj8eDjIwM3iBJvDU8PMxCLeqwqOolARMNlmM77tTUVBiNRv7+MpmMVbSBQAAGg4GtHw4cOID6+noAM0XIli1b8NZbb+H48eM4dOgQd120dgBwBzY5OckHO1XbhM0T6ydWqQ2AmTYAUFlZyQclrU9i0lBVTMQCj8eDX/ziFxCLxeju7sYnn3yCV199FQ6HA9HoTJyhVquFx+NhRT0ROmLnfdR10v0aDAaezdG9xnZi5KOVk5ODcDgMl8uFpKQktmSnZ0psuyVLlmDFihXAX5tgSigU4ktf+hKWLFmCqqoqZk+QV8mlS5eQkJCAmzdvQqfToaamBnK5nMMlent7UVdXh7a2NvT09CAYDKK+vh5dXV28ofv9fjbE6u3tZZEOnfyUlbp48WLeFGhB//GPf0Q0GsWKFSsgFAqxevVqnD17lqPaQqEQXnvtNWg0GrS3t6OnpweZmZmci9na2sqCqMHBQdTW1mJ0dBSDg4NoaWlBW1sbbt68CZfLBYFAAIfDMctHvL6+ntk31AXQvU5OTkKtVvOAFwBTE6empnDt2jUkJiYiPT0d165dQ09PD/Lz83Hp0iW2Mia74tbWVnR1dXEsn8fj4efi9/u5k+no6AAAZpDQy2m323HlyhUkJibCZDJBLBbj1q1b+MY3voHe3l7+mpMnT0IgmMnG9Hq9zClOTEzEyZMnkZaWhuzsbHR2dnJCV01NDYuBbt26xarHYDDI3Rr5obhcLmbU0HOYnJxkoYxEIkF7ezvGx8dhNBrZA4Y2YL1eD6fTiXPnzkEgELDnvc1mQ2dnJ7tomkwmzjAm/yTaTAcGBiASiRj+IAiHoDay5hAKZ3zMKbSaOkSqFqVSKVpaWljtevnyZVbezpkzBwBw8uRJFBUVIS4uDna7HbW1tWhqamIhIdkMZGdnQ6VSwWKxsOAKAH8WgUAACQkJTJkkQy+CrqgaTUlJwbx58yAWi2Gz2VBfX8+OmA0NDZzXOz09EwzjdrtZP1FSUoJz587h17/+Nex2OxQKBXJycvgZGY1GLF26FEuXLoXb7WbfJWLEkR5DJBKhurqaaZ3RaJRV0nQA5Ofnc5KW1+vFpUuX4Ha7OWidihTyugmHw7hx4wYzc373u9/BZrMhISGB7cgp3rKgoADFxcVITk6Gy+WCTCbjZ5udnc0dmkqlwrJly3ifoGhTofCz0PmEhATOVyZmIb3/lF6nUqnQ3d2N+vp6HDx4EE6nE/icgqkvDEZPH3JbWxuCwSCWL1+OEydOMD3y6tWr6OzsZHVcTk4O6uvruSUjJ0BqA8lvXiKRoLm5GSKRCJmZmZg7dy5/mHSQXL58GZWVlewVXlNTg6KiIvT39yM/Px+vv/46L3qKVOvv78fSpUtZ2dfQ0ACfz4e6ujrmGff19cHr9WL+/PkQi8Woq6vjUI/FixcjGAzCZrPxC6RQKLjaVygUSE9PR1dXF/Ly8uByueByuZCWlsZ2x9PTMzGKFy5cwJIlS7Bv3z5+nmq1GlqtFk6nE3K5HD09PfjNb34DiUSCRYsWoaenByaTiecWRqORcVByDaQ5hkgk4hQggg6IQSGVSrl6vnz5MnJychAfH49bt24hLS0NExMTyM3NxfXr15GSkoK+vj4cOnSI71Ov10MulzPVkLzvBQIBampq2DzN7XZjxYoVaGpqQlpaGjIzM9kSQ6vVMnYajUbR0tKCvLw89Pb2YmRkBENDQygsLMTY2Bi7Mmo0GmRkZPCBJpfLObf09ttvxw9+8AN0dnYCAOPL9KIaDAYsXrwYAoEAMpkMVqsVWq2W4wqp+ygqKgIA/pyIY0/QUTAYZNjM5XLB4/Fg0aJFAMDQGG2mer0eZ8+eRVVVFbKzs1mAdevWLRw/fhwA0NfXB7PZjKSkJM6izcnJwejoKL8/ZO9LHQR5sIfD4VmYbyzMSFx0WhcTExPQarWYmpqCx+NhuT9ZMAgEAly9epXhOsLL6frggw9QXV2NO++8E4mJibhw4QIr4WtqauD3+9miuKSkhO+HoCxKdgJmaKdLly7leQrNVqgQogLCarWiq6sLVVVViI+P52hPk8nEUaS9vb2cQyAWi/HWW2/hvvvug81mY2Hin9JuyVRx3bp1jDCQipaiEcm6Wq/XQ6/X833G+vXQezU9PY36+noUFRWhtLSU51RutxsikQgFBQU4fPim3+qEAAAgAElEQVQwsrOz/6z99Quz0QMzWB5h73/84x+58rHZbJicnITZbGbBh0wmQ0ZGBgKBABYsWICFCxcy5EBqUuIjk/XuyMgI2xasXbsWMpkM165dg0gkQltbGwDwyZ2Wlsbq0Ly8PDQ2NgIAQwwkqe7t7UVqairkcjkqKyvR1NTE6UBUcRNumJ+fzy0wydLz8/P5BKcXi1q6SCSCzMxMzh6Nj49HXV0dn/CpqakQCoVYsWIFOjo6UFFRgU8++QQAcP36dRaJhMNhKJVKPPzww6ivr+fUmpSUFHR3d6O4uJifFfAZbS0SifBLoNfr+YWlzYoWPQ3XTCYTRkZGeFBJ1Si9eFNTUzh48CD/PSQScblcs5z90tPT0dzcjKmpKfZ5kcvlfFDTRkVhD/TC0IBryZIliEQiMBqN/DzpXuPj47F8+XK0tLSwRQJlyU5MTECtVuO5555jU7S+vj6eb9y4cYMVxJmZmQgEArh69SpsNhukUumsaD0aTJKwil5oEq6RtQBh5yaTCdFolAf55Nnf2toKjUYDr9eLZcuWsSgtFArho48+mqVL+PDDD/HMM8/A7XZjaGgIRqMRXq8XFosFJ0+e5NQ12lQIIpyYmOBChqAmwvBp+BofH886EI1Gg/HxcchkMhiNRjQ0NECv12P+/PloampiWG9ychJ79uyB0+mcpTD3eDxwOp1Qq9X44IMPUFFRAYFAgPb2drYLJ2+rWEEZHdrkYKpQKKDT6TAwMMA+8rFDaupChEIh6urqYLFYcO3aNaSmpiI1NRVarZZTqHbv3s0HGX0fOnDOnj0Lp9OJJ554giG/mpoaVFZW8vqm+UdbWxtu3LjBzqA0x6B3at68ecybp8+bBIbT09M4efIk4uLicObMGdx+++0QiURwOp1YsGABRCIRfvazn7E6+8+5vjDQTTQaRUlJCSKRmVSljz/+mHNcicdtNBoRCoWQlpYGtVoNk8kEs9nMuCJVn3Ty0odM7TxF/AHgYZJer+ekdrJLIAUuCTmampqwbt06NDQ0sIMetV0JCQls4JScnIzKykrIZLJZoQLUnnk8Hv7Q6X5pQdLvAZ/xb2mYNz09jXnz5qG+vh45OTmIi4tjufrQ0BD8fj/q6+tn5Yf6/X4WiLhcLhZ8kDtkeXk5S/bphaAqnjYCEqDEqgtjD6JwOIyRkRHcuHED6enpjD2aTCa2IGhqamJ4qK+vD729vVzhAkB7ezvUajUaGhrYg4cEN7du3cK6detgsVjYwoIEZoQXA2CmFYleaNAVFxeHW7dusYMgqUWBGUZFdnY2rwuCexobG9HV1cWMFaoUQ6EQVq9eDYlEguvXryM5ORlSqRQmk4lZPwT5xYp9qEMKBoMsxScbXhKpRaNRtpRISkpij/NIJIKuri5e51euXOEwEXI1pUOPFKSnT59GeXk55HI53nzzTZSXl8Pv93P+KOHe9DMJBDNe+fX19bDZbOjq6oLdbmdjN7fbzXMqOqybmpqgVqtZoWm325Gfn4/h4WHU1dWxiZdarUZdXR2/b9QxTE1Nob6+HgsWLMD4+DgcDgdb8RYXF2Px4sWsCqaf79ChQ+jr68PAwACbEdKvDoeDcynovaD1SiycwsJCNDc3o7KyEklJSRgZGUFtbS0kEgkOHz7M4i5aTySCvHTpErZu3QqxWIzk5GQmJaxevRrt7e1QKBTMoJqcnMT58+fZBycWj6f76Ovrg06nY+dakUg0i+2WmJiIkpIStvWIj49nz6sDBw5wl0L3ib9G90qDwYDq6mqMjIzg0KFDbDc8Z84cxtkpRosUffRDA2BcncI6aPAWS5EkNz+ihlEVc+bMGa6OKisrkZ6ejs7OTk5nAoCxsTEOLFmzZg3Gxsawf/9+CIVCbrUCgQA0Gg1viDREooqT4vmoxWxra4PFYgEAvk/6GchnHQAHThA8IxAIsGbNGgDAqVOneFHRQUYOnWazGcnJyThz5gz0ej3C4TDWr1/PG2Zsu0ntusPhYLUq+X9QOhdRVQkHJVycBl8JCQloamri6mzVqlUwGo04deoUhoc/CxujjV6j0SAxMRE6nQ46nQ5nz54FAGzZsgUajYY9P+ggjEajnC8aCzXQEK6iogINDQ2YN28eV2vUgRDrIhqN4tq1a1CpVGhoaAAAbNy4ETabDS0tLQwBEZsEAFQqFcRiMbZs2QK73Y6jR48iMTERZrMZy5cv5z9Pz/PmzZtob2/n+6LNRyaTMQODOoiioiI+qGgQGjtTcDgc6O/vR3Z2NlJSUjAwMIC+vj5+LvQ86RATi8VYuXIlBgcHcenSJchkMqxYsQJisXjWUPqTTz5h2EqtViM1NZWFe7RO6ddAIMBFzNTUFMf0jY2NITk5GYcPH2bLkOrqajgcDp6F0TMguI8UpcnJyVi/fj0ikQjee+895Obmorq6Gk1NTWywJhDMWAvn5OQgNzcXJpOJf15SP09NTaG9vR1erxeDg4OoqqriTp7olZFIhIu0a9eu4e6770ZDQwOi0ShDdNPT07MG7HTYJiYmYvHixcjPz4dQKER3dzeHi9NnPjExgcOHD2PHjh0Mb1E3TD877VenTp2Cx+PB7bffDmCGKEHZvxKJBDU1NYiPj0dlZSVGRkbQ3t7OluM0O6H1gf8qHr1AIPgtgA0A3NFotOjT39MA2AvAAsAK4J5oNOoVzBxfvwBQDSAE4KFoNFr3f/s76BofH0ddXR2qqqqQkJAAjUYDq9WKS5cuYcOGDVyVkPxcKBTC6/UynknSfpJGEyuAKn6qTsmvemRkhNN4qE0bHx+HWq1GZ2cnbty4MQvno8VAnHedTsfOlY2Njejs7MSjjz46C4YhvwubzcYLK/afqqoqXLp0CUqlEnPmzGHGRUJCAnp7e3l4mJubi127dkGlUrEUOzExkaGQP1UyUqXgcDhQVVWFM2fOsJR7z549ePjhhzE6Ogqz2Yzx8XEO89i3bx9bJZA0nPyvL1++zINJiUQCs9nM8Am19cPDw7h+/TrTGPv7+3Ht2jWMjY3xphR7ONNB6Pf7YTQaGdZ4//33MWfOHJSVlTGmOjU1BZ/Ph9bWVpjNZvbAIem6RCJBT08PD24NBgNKSkp4+EV/hgZz/4e6Nw9uszzXxi/J8iLbsuVNXmTL+77ESxzHceIkzh6TEJJCwtKGhEBLoQwt3TiFtpwyzDcdaBmgLYdSDiGBrGQhISGLs9hxYjte4n2R993WYlmSJVmW9f7+UO4bm/PN78CZ75vhe2cygHFk+dX7PM99X/e1DA8P82cqlUrZypgOvIX3k7rEEydOENuB2VQ3btxg73D62ujoKLZt28b3kg4YOnj0ej3sdjsaGxtx48YNPPjgg/wzDQYDd1otLS1cFaanp+Py5ctcrVL3QHRTYq3Y7XaUlZXxZzI7O4srV64wO4sokcHBwcjNzeVQjdnZWbaGoGKK7Kfb2tpw48YNrF+/nu8Lcdnv3LmDyclJNtbz9/fHhQsX+Hf95kV/32Aw4Pjx41iyZAnm5ubQ1taG1tZWPP3003yvKMymuLiYX8vhcMDT05OtkefnXQlu9IzcuXOHsX36fpPJhPDwcNy+fRt2ux1ffPEFAgMD2WdmIXQJuGZPVGUbjUbcvHkT9fX1TJbw8vLCD3/4Q6ZO1tfXY9++fVylU+FEa5H2EZvNhvz8fAiCgPr6ehQVFbHPDj0/ZPjW3NwMhUIBT09Phozp3i3skL7N9W0w+o8BvAfgkwVf+y2AMkEQ/pdIJPrt/f/+DYAtABLv/ykA8I/7//xW1/y8K7Hm2LFjOHDgALy8vPDGG29ALBajs7MTN2/exJ49e3hAS/7S9OEt5NcmJyejtbWVbwzFxCkUCuTl5XH1BHxdSa9ZswZdXV24du0aswuoI/imjP38+fNwOBwICQnBunXrcPfuXXR3d7MfCPloz8/Po6mpiZkK1GbTMK69vZ0HYX19fYi5774nlUoRFRXF1R+9xyVLlnAoyalTp9jt7puCKQC8YE+cOIENGzZAJpPB398fH3/8McRiMVQqFb8XrVaLtrY2xMTEoLi4mAUcJO6hgRBVaS+99BJaW1t5YyZOe2xsLEQiEbZt24aTJ0+iv7+fD6FvStXpPQKuhVVeXs7QTVNTEzo6OpCens4Li/QVubm5SE1NZQyUKn3a+ObnXTbGDQ0NGB8fZ4yZcFOCAwXB5a2i1Wpx+vRpTiiiin7h/aTqmTaS7OxsbNiwAU1NTbhy5QrWrFnDXU5raysKCwvh7+/P74eEUmQtTa18Tk4OGhoacOXKFeTn52Nubg7+/v6LYMi5uTkEBwfjypUrjKdTVbfQD4f0ImKxmD10kpOTsWnTJrzzzjs4ePAgHnnkEYaVuru7kZuby8/2QiMtOuiJdRMXF8fWyxRkTYfR0NAQPD098cgjj+DEiRM4ePDgIqM3qmYXrnPybjIajairq4NUKkV6ejoGBwfxwQcfYP/+/Zibm8OxY8ewf/9+AOC5GwAWxi1MraKOLTs7G2q1GtnZ2WzvTCwvwNVFGgwGzMzMQKVSMU1y4SyH1jlBhKR7kcvl/Ptcu3YNGzZsYEPBhcUWbfi0z9CzSu+B5n8LB/RisRhnzpxh/6CAgABOp8vKykJra+siI7Xvcv23pmaCIJQD+GbA94MASEV0EMCOBV//RHBdVQDkIpEo/Lu8IfJ1Hx4ext/+9jds2rQJ0dHRHMv36aef4sMPP2SLVIPBwEpMiqOjKi8uLo4fpujoaE556u3txcDAAIxGI27cuAGtVov9+/fj5s2bGB0dXcSAAcADNrpoSOV0OpGUlIQLFy5gbGwMDzzwAH7xi1/A4XCgrKwMZWVlrPaz2WzIyspCSUkJSkpKsHnzZqxfvx65ublISEiAw+HA8PAwV2u02fj4+PDEvbS0FGq1Gnfv3mWWEqk8aaZA1/z8PDIyMjA9PQ2z2Yzy8nKcO3cOJ0+exMqVK3mTmpqagiAIaGxsRExMDEpKShYl+BA7IzQ0FGlpaVi2bBn8/Pzw9ttvc4tLXOcbN24w1fPIkSOM+xNmSYtmYaVMTqNkITwzM4Oenh4+GIjeShxosViMrKwsPqQXmoXRz3M4HBy8cufOHX4eaLMm4dWuXbs4co42aaq8FsIiwNeLXhAEBAYGoqenB++88w6uX78Oh8OBtLQ03sxGR0c5EJpEWrTRe3p68numaMns7GwegOp0OnZApcN99+7dbPRGEBApwum+3l+r2LRpEw9QyYb3n//8J9asWcOOoPS9UqmUcXb6HCUSCXx8fLhSXijuyszMRHNzMzQaDetDZDIZdzsnT55kZTfBT1SFEgQJuDa55cuXs/nf/LwrtL62thabNm2CWOxyoaXijIqjhfeMniu6l/Q1X19fFqgZDIZFvwc9GxSHKZVKuROhtU7Plb+/P3d2xDKjgoZek2Cu69evIzk5mf/+wp9FXQGpteleenp6oqioiAsYQiJoILxv3z4WxUmlUrS2tvIgnOaD3+X6n7JuQgVBGLv/wIyJRCLF/a8rAQwt+L7h+18b++YLiESiZwA8s/BrNDSlVpO8p8nmc37e5ZuuVCp5EVgsFoSFhXGrRUMUGgip1WpOyikrK8OKFStw7949ts6dnZ3F4OAgqqursX37dkxNTUGv16Onpwf+/v4AsEgIQbgkbf737t1DYmIi8vPzcfjwYZ6a3/8dsWLFCla5kUCH8E1SY5Lro06ng0ql4qFcX18fbt26xae3ILjSe/Ly8iCRSKBQKHD16lUeYC8IIwAA3Lt3DxKJhP9fVFQUVqxYgQ8//BDV1dV8D3fu3On68JRKHurRpkLvlaoRCnQBwJXIwMAAKisrAbiUwwCwfv16DA0NccQf8LXdwcqVK9kWISkpCcPDw/D19YVGo2FK3oMPPojz58/j/PnzrEItLi7m+QcAtoqgA4nYSTKZDFarlbNZ6V6bzWb09/dDq9VCo9Hg1KlTHIBBCmGCqfLy8ljgA7g2wvDwcAwMDLCr5vLly+Hj44OysjL8+7//O+Lj47FkyRJ+bujgoS6CBEVisZgDZ4jTPzs7yzxsu92OoaEh5ObmIikpCVeuXIGfnx9DDXa7nVW5JMSh9XPq1CkkJSWhvb2dGWZZWVkAgB/+8IeYmZnhIPrS0tJFgz0SaVEHRBUpffZ0EJO4LiAgAGNjY3jwwQcxPDwMrVYLrVaL6OhoZjRFRESwiIwum82Ga9euITU1FW1tbXBzc+Pup7KyEtu2bYNSqWT5PwBmJ30TRiW3VTrwqJOguQJtpKGhoayKJ7vgzZs34+TJkwBc7qRqtZpFiyRsjLmfxUCYOBUUf/zjH/HWW2/B398fVquVHVtp06aDhAoHqty9vLxgNpuZ/kmQJilf5XI5jEYjDh8+zL/bE088gfPnz2NychLT09PIyclBXV3dN7fU/9/r/zS98n/XT/xvp72CIHwA4APANYylqo4qVAB46KGH0N3djU2bNvEEfXJyEkFBQWhtbeVA566uLq6EiB5Jvihubm68OWzfvh1qtRoqlQorVqzAyMgI9Ho9JiYmOKSZsHHiZ2u1WhZwNTY2wt/fny1VqcooKCjAwMAAtm3bxrQ1wmpp4DYzM4N79+5h2bJlXO2QrzXgopx5enrCbrfj1q1beOCBBzA9PY3169cvophmZmbCz88PdXV1uHLlCqsqSTrNH8R9jJC477t27YLZbIbRaERpaSnjmiQ8k0ql7EZJPHaqpMg/hbqThRYCFNKel5cHwBVmrlQqERwczMPjhUNGLy8vpoAKgoDm5mbGUIm1ZLVaMT8/jz179rClbmNjI1NFqdugxU8tvZeXF/OWCev28/OD0WiEQqFg5tHo6CjCwsKwcuVKTE1NMcOH2DaCIKCjo2NRexwQEICRkRGEh4dj27Zt0Gq1vFgfeeQRTE9Po62tjYNEqLIjzyKTycRsLeG+qpO8+cVil3+7h4cHfH194e/vjzt37uBPf/oTPDw8sGXLFmaCHT58mGcVdrsdo6Oj/LnHxsZiYGAAnp6eSElJwQ9+8APMz8+jq6sLXl5e6OnpQW9vL/bs2cMQCFX2C9Or6Nmh7oF8jKiiJD8eDw8PDA0NoaWlBWKxGA8//DACAgLg7++Pjo4OWK1WtuegQwQAsrKymIv/9NNPs7XC7du3YTab8eWXX8LDwwP79+/ng5JgKYJSqUucmZlhyigVHkSaoMOCBv5ubq40s9zcXBQUFODChQs8cO/t7eUuAQAyMzN5MLtp0yYAYGuTw4cP49VXX8WuXbugVqsRFBTEUA3tU7TuCAIGwLMUmUyG2dlZJoOQj5NUKkVwcDAKCwtRVlaGtLQ0RERE4OjRo+zVQ2tx9erVrJ/4Ntf/dKOfEIlE4fer+XAAk/e/PgwgasH3RQIY/TYvSAMRCoogQUR0dDS3qmT+RbzampoaDjEICgpi72xK/qGFRMo68kQhbwvAtTio0o6JiYHZbEZ9fT1EIhF6enqYdkcDPb1ez1YH7u7u2LFjB3x8fLjdJYEJSdSVSiWWLl2K2tpa6PV6TE1N8UNH2DK9NjFh0tLSMDs7C7PZzLg+xdtRwDnlolK1SINouoi/Ozs7i/T0dLaBmJ2dhUKhgEgkglqtZoyXfGjIz5yYNFTJAa6KcXp6GlarFQkJCejt7UVYWBjjyn5+fkwbHB8fR1xcHHbv3o1Dhw5hfn6ebSgWYt9ULfr5+SEhIYFDQEgYRzkEFMxBKVfkXUTVPPB1VUpYKwXGp6SkoKenB06nK/4wLS1tkaXD7Owsli5dyjMH8uxZCN2Mj49jbm4OS5cuZSEeDbAjIyMhk8lw9+5dTuKiQoBotpTaRd0RmXMRLx5wbSQLox5zc3P5fhJOvHXrVty6dYuN34h+aLVa0d7ezrzrgoICDA4OIjExkaGU1NRU6HQ6tLS0ICcnB83NzcjMzORDRyT6Oh2KqmXKVSB//YX0T/K7LywsRExMDPsdeXh4YMeOHejq6sLk5CQiIiI4IxhwdZphYWF8T+x2O6amprBz504WGL733nv47LPPeD3Te1yYDwx87QtFG6XRaOTQH19fX+bi9/f3Y3Z2Frt27UJKSgrMZjPWrVvHqVxkR0J6GfK5ysrK4uEvkQuefvpplJaW4uOPP4ZCocD69etx9epVZhB5eHjAbDYzlCQWixcZ1wFfQ0T0jJEGRKfTob29HWvXrsWyZctYyKfRaCAIAlpbWxc9l9/2+p9u9F8A2Avgf93/59kFX39eJBIdhWsIO00Qz393icViPPLII7Db7Thz5gwiIyMZrzKZTJBIJGhubkZNTQ0KCgqg0+kQGRmJiIgIPPnkk3j33XehVCrR3d3NHi7k40Lub3TjOzo6WOxB0mVvb2+MjY3xwyqTybBixQpER0djcnKSaY379u2Dw+FAd3c3KioqcPHiRWzevBliscvcjJztOjs7odFo0NzcjE2bNmHlypX44osvUFlZib6+PoadDAYDD6YiIyNx+/ZtrF+/HtPT09BqtfDx8UFqaiobjQEuEQ1ZIXh5eWH79u3w8PDA5cuX0dvbCwA4cOAAPD090dHRgatXr3L7Tgcd0Tt7enpw584d/OY3v8GhQ4fQ0NAANzc3LFu2jO8X8cDNZjMLVUhaDwBXr17lqpC6gfDwcMzPz+Pzzz9HbGwspFIpUlJS2NGS2tvnnnuOM0hv3bqF5ORk2Gw2bq/JvZJ8WuLj41FRUYEtW7Ywbk9V8UIqJXUdy5cvx9zcHOLj49Hf34+WlhZkZGRwiHZiYiLTa4k3HhERgcnJSU49EovF+NGPfgSbzYYjR45AEASUlpay5oB43DRnKSkpwcTEBBISEmA2mxEcHMywgr+//38x22toaIBcLodSqYRGo+FNiYZ8kZGRCAoKQkdHB06fPs2wCr0GQRm7du2CIAjsprpy5UqMj48jIyMDw8PDcHd3J9k8wsPDcffuXRaXURVPrCPaWEmVTN5KO3bsQGtrK5RKJYxGI8bGxvCDH/wAvr6+GBkZgcVi4aE9HTw6nW4RrJibm4uOjg7U19fj7t27+PnPf87CJ3quiSiQnJzMWhSn08mHJxVywNcFErGqfHx8WPUtk8lw+vRpiMVivPDCCwgJCYFWq4VOp2NnzP7+foZRaI0NDAywrUVlZSVWrlyJmJgY1k34+flBr9fj5ZdfZrsS8s4h+MjpdLKlBPA1E45w/pqaGiQmJiIsLAzz866kuxUrViAlJYXV5nq9nn83MpyjZLnvcn0beuURAGsABItEomEAf4Brgz8uEomeAjAI4OH7334BLmplN1z0yn3f9o3Q0M1ms2Hfvn04f/48tmzZwmZlZO61YcMGvP322/Dw8EBsbCwiIiLQ2trKKUNkp6rRaCCXy+Hh4YGQkBAAru6A6FQFBQUcIL19+3aIRCL09vbi8OHDePzxxzmFiqCXF198EX/96195cS9ZsgTJycm4cuUKh2eT897y5cuRk5PD1glLlizB2NgYV8s6nQ5Go5Gx/vDwcIhEIixfvhxqtRp2ux0hISFwc3NjCEehUEAikeDmzZsICAjAtWvXsHfvXu6C3N3d8dBDD+Gtt94C4JorBAQEIDo6Gk8++SSOHDmCvLw8lJSUMKMmMzMTFRUViIiI4FDsrq4uVnsaDAYEBAQwtjw1NcWtaVVVFYqLi2G32/Hkk09Cq9Xi4sWLeOSRRxATE4OzZ8/izp07yM/PR1ZWFlcywcHBiI2NZSdD2lRSU1ORmpqKCxcuwMfHB/v378f8/Dw++OADvPLKK/jyyy85avLIkSM4d+4cHnroIcaNCU5zc3N5y5Co5+bNm/jNb36DhoYGJCUloampCSMjI1izZg2Ghoag0+lw/fp1mM1m/OAHP2BYzdvbG/7+/vjDH/4A4GvhzquvvorXXnsNgiBgZGQE27dvh91ux7vvvot9+/axWvsvf/kLVCoVQkNDuSqm+Q6lchGdlzq37u5uHlzW19cjMDAQpaWlmJ2dRXNzM86ePYu1a9dyTN5C7vybb74JX19f+Pn54YUXXoCPjw/eeOMN/PrXv0ZHRweWLVuG7u5uiEQiZrTo9Xp0dHSwCRoplakIIF2GXC6H2WyGTCbjA1cqlaK6uhoAFiVISSQS9pOh+E6LxQKbzYZPP/0UgCsFLj8/H97e3vjrX/+KQ4cOYevWrawS7+jogFQqxcMPu7aVmpoalJSUMNOGunHqjEmvQuZyZFdBsYx0CM3MzCAiIoI7qhMnTsBkMiEuLo6hoNHRUSZ47Nu3D4Ig4OjRoygrK8NTTz3FWoHo6GgejNrtdrzwwguLOmBiVZHuxG63c3Hj6enJKmW5XM6uvGvXrsXFixexYcMGFoARFbesrIxhycHBwe9ErQS+HevmUUEQwgVBcBcEIVIQhH8JgqATBGGdIAiJ9/+pv/+9giAIzwmCEC8IQqYgCLXf9o1QG02Y4MaNG+F0upz7yPAoPT0dbW1tMJlMcHNzY2+NoKAgbNiwAWFhYey5TRzc2NhYbNmyhYePFHlXV1eHzz77DCKRiCGOixcvYvfu3TzkIwYMCXoAsJ0AYWWbNm2CVqvlzfndd9+Fw+FAb28vdDodVqxYwcOinJwceHh4oL+/nxd0ZGQkRkZGoFAooNFo4Ofnx9N5sViMw4cPMyQkFouhVqvh6+uLJ598kodYBoOB6V10keUD6RG2b98OX19fnDlzBoIg4LPPPuMqKz8/H9HR0axKTEhIwPj4OEwmE2JjYznWkO5raWkpsrKyEBISAj8/P7S0tODMmTPYuXMnYmJimHHg5eWFZcuWcZVEDKKFrBuyPJZIJJDL5UhPT2f669TUFF555RWEhoZCqVSip6cHgYGB2LJlC6anp/H3v/8db7/9Nu7du8exio2Njbhw4QJ0Oh1KS0vxq1/9igUuBPk1NzezxXVqaiqGh4fxzDPPcOQgwQELZftUhVksFjz77LPo6elBaGgokwTm5+cREhLCnU9MTAy++uorXLx4EePj49zdEcxmMplgNptx505j5RAAACAASURBVM4djI+PY//+/VCpVIiPj4der4efnx80Gg2Gh4cxNzeHZcuWIS8vD5mZmfyeqAKnVp4G5wQDPP744+yTPzo6ilOnTuH1119nEVxhYSFu3LjBsAyRGfR6Pb8GwUZmsxmDg4OME5eVleF3v/sdJBIJPv/8c+j1etTW1qKiogIDAwPYu3cvV6U+Pj68fgDw5jU7O4uf/vSnsNvtiIuLQ39/P4aGhnDz5k088cQTfF/Ly8tdm5X4a4U7dQo6nQ7T09OLLCU6OztZMGe1WvHUU0/B29sbR44cwcDAABMubDYb9uzZg+XLlyM1NRUFBQVk/QsALAb86U9/iqioKJSUlLAIamxsDMXFxdBoNGwNUlFRwUJH2vAJVpqenuZhLsE41DWqVCpW+K9du5bND4m1c/XqVQQFBeGBBx7Ao48+yofid7m+N143IpGIjcnIcvfIkSM4f/48Xn75ZZSXl8NisaChoYG5vjSUOnHiBLZu3cpOlR4eHggMDITRaERNTQ3fXGqtAaC6uhorVqxgu9bbt2/D398fERERjI9T9UoYKPA1tZKwRcIBm5ubkZ6ejtTUVPz9739nz47+/n6WdIeFhXELTb4uFFBMM4orV67gmWee4ZAQm82GU6dOYXBwEK+99hpWr16N+vp67Nmzh4VC5O1DXQjwNadaIpGw8pFEInSgnDhxAoIgsMMjBWckJyezI6hareYD1el0Ii8vj20PyM+HNsHKykqcPXsWTz75JB577DEcPHiQnRO9vLyg1+vZ4Imu8fFxhIWFQSaTcQ6wzWbDW2+9hWeeeQaXL19GbGwsmpubkZeXh6mpKeTk5CArKwsffvghxsfHce3aNWzcuJH1FlKpFDk5OUhPT0dZWRmUSiV8fX1hNpu5WpNKpbhy5QpaW1uxZMkSyGQyzp2lnNKFYh864MnjRaPR4PXXX8ePf/xj/Pa3v4XT6WSs3dvbG1u3bkVVVRVmZmZw+/ZtaDQaOJ1OdHV1QSQSYXJykrNZi4uL2a1SJBKhvb0dcXFxbHlw8OBBaLVa/OxnP+MBJMEtVOgAYG92GipKJBKcP38eP/3pTzE9PY2VK1fi2LFj2LRpExobGxEfH4/Vq1fjH//4B9zd3VneT3ML+kzIrG3dunVYtmwZGhsbkZycjGPHjkGhUKC9vR3FxcXYuHEjDh06hJdeeokZbXQfg4OD+V6SNmB+fp71DWTZER0djYyMDB52O51O7Nq1C++++y6ysrKQmZkJDw8PNhFcqOGgPF+VSoW4uDieU1GubHt7Ow+Yq6qq8OSTT/LAlDqShbRFcscVBAHbt2/HM888g3/7t3/D5OQkmwLSITgxMYHu7m7G9GkwazKZ4OPjw5oIgndu3brF8ZwikQjNzc1YunQpFAoFLly4gJKSEnZu9ff3R2FhIXdYXl5eWLFiBc8Tvs31vdnoaWOyWq1QKBSMl7344os4efIkixyI0UJDT3d3dzYXKikpQVtbG5KTk2EymaDT6RAWFsZVuaenJ2OdEokEFRUV8PX1RXFxMVJTU5GcnMxVv4eHB9zd3RlHJ/5xT08PlEolD838/f2hUqmQlpYGd3d3TE5OMouHWkGRSISKigrs3LkTGRkZyMnJwfXr17F161aUlZWhoKCAOc8ymQxubm5scuV0OnHgwAH84x//wMjICM6ePYsdO3bw70+pPwupaIDr4HQ4HNBqtfz7+/v7IykpCYGBgTxsoqGiSCRCbW0t889Xr14NtVrNIpmUlBSEhoZyWlZBQQEEQeDhaUhICDZs2ICysjIMDw/j/fffZ46zp6cnRkdHYbFYYLfbOUwFAEMtBJFFRUXh4MGDCAwMxGeffcaVEOGdgYGB7BeyYcMGDA0NoaurC729vYiMjER4eDjrJdra2hAQEIBLly5h06ZN8PHxweOPP46zZ89CJpPhwQcfRFNTE28W3t7emJqaYrx14UVSfxqoqVQqnDx5EtnZ2XjllVcgCALu3bvHcJavry8KCgp4U+zt7WUIQyaTMfOEHAqlUiljtc8++yzOnz/Pz+vLL7+MX/7ylwyv+Pj4oLe3F8HBwYs8WoiNQgWQQqGATqdDRkYGY+JETiDJfWhoKF566SWMjY2hoqIC+fn50Ol0UKvVCAkJQUxMDBISEhAZGYmenh6cO3eOB+eA63AZHR3lsBcvLy+GfqhLJ6dIuux2OwICAlgVTUN8m80GpVKJv/zlL8jIyOCkqqSkJHh4eCA4OBhVVVUQBFdwPInPaDj+yCOP8HNCWpT6+nqsWbMGXl5eiIqKgoeHBwICAjA0NMQdMFXk38y1JUYP7TtWqxVlZWUICQnBV199hZmZGfziF79gyDkiIgK1tbVsWbEQpfDz84PNZoPFYsGDDz4IHx8fpoWT9XJgYCA++OADdHR0YOXKlWz9QsplYvQtFB9+2+u7fff/5YtEKRaLBVarFWNjYzh69Cj6+vp4AEpsEKfTicnJSRw+fBh+fn6QyWS4c+cOALC5F1EGVSoVB3D39/czz5ZETOfOnUNvb+8ifxkK3KBNf6FAh/5bKpViamoKFRUVuH37Nnp6epg3u5BCZ7VasXz5cmbwqNVq+Pv748aNGwgPD4dWq8WXX36J5ORk9r2h6brVasX7778Ph8OB6upquLu7IyQkhB9ykqmHhISw+AUAqxWpQjEajQgPD8cDDzzA1EEyZBobG4O3tzfS0tJYWDYwMACtVsveIiaTCc3Nzejs7MSSJUswMDCAoKAgWK1WjqK7ceMGent7UV9fD4vFgj179sDpdPIw3el0Qi6XMysCcOG7VEHTYDMgIABarZY58J2dnayPcHNzQ09PD+7evQsfHx/09PRw50V/V6/Xo7GxEV1dXbh69SqWLFmyiP4GAO+//z6Lx1auXLlIpUjDroUHJzEzRkZGMDk5ibq6OqSkpGBychIBAQEAwJCAw+Fg+IXsn0m0FR0dzclPnZ2dqK2txe3bt9HV1YV//etf3BlUVVVhfn4ef/rTn+Du7s7qZKPRCL1ej8jISGak0Oe+UMlqMpkwPDwMu92OpqYmhrfIFpmGw7dv3+YNsaioiNfB7373O85LaGlp4SH72bNncfHiRQCLQ7ptNhsSExMhl8s5dIXuBR1AdC20zjCbzax5mZiYwH/+539CKpXio48+gpeXF1JSUjhLYW5uDqtWrcJTTz2Fxx9/HIWFhYiPj8fatWvh5eWF6upq3Lx5E2fPnuUZSkFBAWQyGTo6OqDRaBAcHIyIiAiEhYXBZDJxwUb0WxqcLtSukKCLGDBUoRNXvrOzkwOESABZUlKC2NhY5ObmoqioCMuXL8eyZcsQGRnJbLzR0VFotVoWRhEJQS6X86yE7pG/vz+mpqaYDbXw2fw21/dmo6cKlMIYHA4HnnjiCTQ2NiIxMRGTk5PcutDG0NbWxkrKxsZGLF26lFujoaEh+Pn5QS6XIzQ0FAEBAdBoNJyXSdVHc3MzdDodli9fjosXL8JqtaK7u5vzJQlKoA2T/Mb1ej27Q27evBk9PT1wc3PjlpM6D7LLJdpoRkYGpqammI1BC2vLli28KQqCwJFz3t7eTO1LT09HcnIyDh48iKmpKUxMTLB5GVX3dKWnp8NsNjPMVFZWhm3btuHq1assiCL7ArFYDK1Wi8uXL7P3DQ3LhoaGWLNAHvfE26fB9Pz8PNra2tDe3g6pVApfX1+kpKRAq9ViaGiIhSsBAQH/RdW30PzN4XCgpqYGP/nJT5CQkIDQ0FDGn0lQ5Ovri8rKSsYoi4qKeIObnp7me7B582ZkZ2dDLpcjPj4ebm4uj/hDhw4xE2vLli04f/48enp6OJSG8NOYmJhFm5NSqeRq1WQyYePGjZiammKutcPhQHNzMwtfHA4HLl++DJ1Oh4iICERHR0MkEmFkZARBQUHQaDRISkpir5PJyUk89NBD7J5Km2h+fj5Onz6N5ORkaLVarjhJjk9GdYCrAqVUNLvdDrPZjDfeeAMmkwmVlZX8mZMCdnZ2FvHx8eyQSew0q9WKP//5zzyUdnd3R1VVFSIjI/Hcc88hNDQU/f39cHNz2XuLxWKUlZWhrq4OlZWVKCsr4y6JkqcWwmD0ns1mMwevBAYGstspQZJ0aGm1WsaxJycncfbsWXzyySfQ6/XIycnhbohUvVlZWYiLiwMAth8h2ujvf/97jIyMYMuWLRgfH+d0Oo1Gw8Z6dJE2xW63o6urC/v27YNY7Eo3m5mZYedaWmt5eXk4e/YsGhoaYDAYIJPJsH79ekRGRsLPzw8ZGRlYtWoVpqenER8fj4GBAaxcuRLu7u44dOgQayyoe+zu7mZju87OTt7kCWn4Ltf3ZqMHwFxeEgSlpKQgOjoa/v7+TDkjpRsADtw2GAzIzc1ln2yDwYDIyEjGvdva2mCxWFhWTUIbwuIdDgf+8pe/ICcnh+P3qK308vJi5gTgWkx0EAUFBWFmZoZDgylPkiwBCGJyc3Pj/z81NYXk5GTI5XJ0d3dj5cqV0Ol0iIqKglKpZFUnTdipXSPseOPGjZDJZDCbzQgICGAMVS6XL8JB6b06HA4YDAao1WoIgoDKykqMj49z+0fVCuVW0kZss9mwatUq5sNToAQNl6nKFASBKw3asIOCgrBq1SrU1NRAIpEw197pdEKhUCwactKm4+fnB51Ox0599H3EpJmcnGSLZdIgEFUUAEMaJKhTqVRwOBzIzs5eZPdMsnZ3d3d89tlnyMrKwqVLl7iNp0NpcnKSmQ0LBURBQUGYmprCD3/4Q7ZHXqjapK6BsN+MjAyMj48jKCiI7ysddARnOBwOVrHSH39/f4ZAWltb8fLLL/OchOiGdrudPf8BcE4yGZtVVlbyZ0JFCd0n2hTLy8tRUVHBWbCkSwkICEBpaSlMJhNWrFiB0dFRHDt2DIcPHwYArmAnJiYAuCi/vr6+WL58OUZHRzE4OMi2B3Tv6BoZGWHs3mg0Yu/evdypL4xRJHqpwWBgLQuRESQSCZKTk9HV1QWr1Qq9Xo/x8XGGbZKTk1FbW8sh9XQYAi5r7JiYGLS2tnLeQVBQEJMv6CI6p1arRUtLC+x2OzNkaO1MTU2x3/5rr72G9evXo6SkBNPT00hMTMS9e/cgFotRW1sLi8WC7u5ueHh4oLGxEevWrcOJEyfQ09OD9evX8wYukUgwPj6O0dFRNDc3IzQ0lK0aaN/TaDTfaW/93mD0gKtqkkqlnIZTV1eHpKQkSCRfhwDQgiRHQ5VKxfivt7c3UlJSkJ6ejubmZh4ITUxMQKlUQiwWL0ppDwgIYIXhww8/jNDQUPz1r3/Fj3/8Y8ZjAXBEGgDeTKktPX78OHbv3o2ioiLG/ikomYQzNTU1qKioQGZmJmOTxJ+dmZnB2rVrAQDd3d2YnZ1ltS5VQeQiaTKZcOjQITz66KN499138dxzz8Fut8Pf33+RohhwdR6kCv3kk08QGhqKy5cvIz09nQfABD85nU6MjY2hqKgI165dQ15eHsNX9P3kWkidik6n42p+YGCA8UgAPEiMiYnheD1vb2/WNRD+TYcgCWL++c9/Ijc3F83NzZDL5XwIkViFRE65ubm8UVksFmzatAnV1dXQaDTIyclBYmIiNBoNFAoFTp06hd27d8Nms3EK1ezsLHp7e5GUlITdu3czfY386UmwtfB+BgYGwmQyYWRkBNeuXWNB1kJePH1eRPVzOp0cfB4dHY0NGzagvb0doaGhiIpy6QrJQZT40jabjQe2DocDtbW1KCwshFqtRnV1NTZt2gSJRIKQkBCmPNJ9J1EV0UsJPqmpqWH2C82+9Ho9s1i8vLyQkJCAL774AnFxcXzotrW1sdp71apVHBO5ceNGHtzSwWIwGHDw4EE8+uijaGtrQ3l5OQIDA5nm+E1MWS6X4/r162hra+N/pwLIaDTya87Pu7JvY2NjmZlDNN+KigqsW7cOtbW1UCqVGBsb41nUyZMnWQEsk8m4uBCJRAgNDUVnZyfz/pctW8aMq4XdJlkyTE5OYunSpejt7YVEIkFqaioXDmKxGEqlEh999BGio6NZKEexp4GBgWhqakJsbCxu3bqFsLAwtLe3Y3Z2FgaDAWazGQkJCUhKSsLcnCsInuCa/Px8WCwWBAYG4ujRo+jv70dISAiHzH+X63uz0TudTvz5z3+G3W5HXl4eiouLIZPJEBYWxqnnDQ0NjCsTS4BUaxS4EBkZiStXrqC0tBTNzc1M12xsbERhYSF3BPTHbrdj5cqVrAxds2YNDh8+jCeeeIJ5uZGRkSw0mZychFqtRn19PXx8fLBp0yYYjUZERERgcHCQh200JKOuIDY2FocOHcLOnTtZWdjQ0IDVq1djbm4Oly5dwgMPPIAvvviCI+3I5ZAqc7lcjoyMDExMTKCkpATvv/8+y8QJw6ZrcnISgiDgk08+QXh4OLKzs6HT6RAfH4/m5mbmH5PKlFglRP8zGo3MiAkMDIS7uztqamrg5uaG+Ph4OBwO+Pj4YHh4GNHR0cwS8vLyQnt7O6Kjo2GxWHDz5k3I5XI2q/L19V20mHx9ffHmm2+y82Vubi5GRkZ4sE0/B3AxdJRKJZKTk/HRRx+huLgYdXV1iIyMZGodzQ3q6+uRlpbGnzdBAzSboNCYM2fO8CC8qqoKe/fuZe3Aq6++yu9zamoK7733HueZisViKBQKVlwTTZd0AbRACQ4kdW9wcDALb6anp3mTSklJYYMw8sGhWU9oaCi++uor7N27Fx9++CHc3d2xZ88epuD+6le/AgD09vbiypUrcHd3R0ZGBlQqFfr6+rB06VI0NjbCbrfDYrGwDS4AhiipkyG/F/LWyc3NRU1NDUOFhYWF7OFCkAxBrunp6bh79y7Pho4fP862AQsr0E8//RRWqxU5OTns5U/2yET1jImJ4UH+hg0bMDAwgODgYISEhCAhIQEDAwPw9vbGlStX4Onpiba2NigUCiiVSk7YIlEbWThQR5Wfn4+WlhY89thj6OzsRGVlJTPHwsLCALjotOfOnUN0dDTy8vI4BpPQBTJsIyfPPXv2YH5+ngNbqOiz2WyIj4/nomtiYoIDZ4gdRgXFQluMwMBAhISEMHpAByhBb0qlkmmn3+b63mz0xOCgljgoKAhjY2PcLre0tDAPVRAEGAwG7N69G42NjfDy8sKuXbvwxhtvQCaTITAwEOfOncP09DQEQcCzzz7L4h86hefm5thbhzy3SXW3bNky3LhxA6GhoaitrWX/csAV8rFy5UpERUUx9508o8m4ysfHhxPfqXJ2OBzYuHEjuru7ce3aNaY9Hj9+HFKpFKWlpZiZmUFKSgpCQkLg6+vLXHZ/f3+uHiUSCfR6PXx9fbF69WrcvHkTBw4cwCeffMJeNQDYsXDVqlXw9vZmZSr9Xdp0iZLndDqh0+mQmJiI5ORklJeXo6uri5lFVVVVOHDgANNJKafV29sbcrmcPXso7IFcBCm8+saNG3j00Udhs9nwyiuvAHAtpqtXryI/Px9BQUEsJIuMjERaWhru3LnD1Le5uTn09PQgOzubW225XI6tW7eisrISY2NjsFgsGB0dRWpqKvuXr1u3jr1QiCJLdgzkNSKTyRAVFYWIiAg0NjZCpVJxEhZ9f3V1NbZt2waHw5XhmZWVxfgucbg3b94MrVYLhUKBiIgI2O12TExMQKFQYM2aNUxfpbkPxQOOjo7CZDLB6XTyDIqgIDqI4+PjWZfh7u6Onp4ePvzpogG4WCxGd3c3lEolt/3Z2dmcE+Dv74+JiQk4HA7k5+fDx8cHJpOJffZNJhMfOI2NjYvYM2TJQX4t9GxTelVCQgL6+/shk8mwd+9eDA8PQyqVIjMzkwVTRUVFiI2NZf472Q8Q5ZKCskmlKxKJkJWVhYMHD+I3v/kN2tvbeTibl5cHi8XCGcsER1H6Fg1Mae3bbDaYTCbk5eWhtrYWMTExWLduHdRqNXPzKfieMgJILU+aC9KCULdD4rLa2loEBwcz9OtwOFBQ4HJpF4lEUCgUKCsrYxrl8PAw3nzzTfzhD3/gbrm4uJgtzynRSqlU8iyQOj8SHH7b63sTJQiAlWH5+fksiiLM7e7duxAEgVksP//5z+Hp6QmVSoWKigoWwxA8sJCVUl5ezglPwcHB6OrqYiydcidpAJaeng6lUomwsDDk5ubCarUypgi4hpx1dXUICAhAcnIyb+r+/v5oaGhgShjJll977TX4+vqis7OTU4oWPtBkqpSRkYGjR49i9erVnGXZ29vL036VSsW2rDSs8fPzY/dHNzc3dHR08Pxi3bp16O7uRkFBAUvwrVYrent7eVZA7Z9CoYDRaGTLYrlczmpZmjeQxztV6oRbT09Po7y8nOEKT09PZGdncwVD6r/ExERYLBacPn16kbgrLCwMcXFxTC+japCM5Sh4RSKR8OKfn59nH5jy8nIW37i5uUGj0eDu3btITU1lzxgaXNXW1qKrqwsSiQTr1q1jkRZ54ygUCsTHx2NiYgKdnZ3sQQS4BnN5eXkc+EyKyOnpaZhMJkxMTPDQz+l0YnBwkAfKpO6+dOkSDAYDm4DRM0g5uSKRCDKZDGq1mrsuuVyO/Px8tvSVyWTIyclBQEAAZDIZvvrqK342g4KCMD4+jsDAQCQmJrJ4i56bgYEBrFq1CgEBASzjt9lskEqlPECen3elJVVVVWFsbAzR0dGMDZNhIHG/5+bmUF5eDpPJhG3btnGHFxgYiPj4eMzMzCA2NhZffvkl6uvruePs7+9HQkICAgMDoVKpWBcwNTUFhUKB3t5erF27luGR9vZ27hhIEAm4DuDGxkbG10kRbzQaWe3r5uaGxsZG+Pr6YmBgYNGQPywsjAsWUnMbDAbWQwwMDCA1NRUqlYqH/UQRpvezkAUIACEhIRCJREhISOAEqoWEg7S0tEU20/Hx8czH9/b2xieffAKbzYbk5GQOJCHYiUgo7e3tbHWCbxkl+L3a6AMCAvDCCy+gsbERTqcT3d3dCA4OxtzcHE+dTSYTfvSjH7G9gUgk4uARu92O8PBwTExMMC5HsYGUBpWcnAy1Ws2DORLRlJaWwmKxsHDlyJEjLMAg+TLgGngtW7aMP/CpqSn28u7t7YVIJGK/6xdffJE3H71ejzt37iAgIIDhA2KJEPYcFxfHHYxCocCVK1dYYUcts91uZ52B1WrF2bNnodFoWOxDQ6f4+HgkJiaipaUFY2NjPGSNiopiuuLY2BhMJhNefPFF9PT0YHx8nA3epqenubJxd3dHVFQU2tvbsX79evj4+LA7oUKh4CEYzT5CQkJ4EE3t/a1bt2A0GjEyMsIVLQCGPUgAQxuQxWJBT08PzwHi4+NRVFSE8+fPs/e3IAi4fv06LyaqTB0OB4qLixmvJuWyRCJBXV0d8/tpAU9NTbEy8cSJE6ydWMipnpubg0ajYctgqvSIQWW1WrFs2TJERUXhwoULyM3NZRWlm5sbhoaG0N/fz++PQnEiIyO5KiZrCnd3d043S09Ph1QqhUKh4EOzqqoKjY2NcDgcTNUEXMN3jUYDi8WCy5cvM+zn6enJmb0EkYyOjmJ4eJg52jTAbWhoQGVlJas5GxoaYLPZEB4ezmE6RBAgpfLMzAwiIyORkJCA1NRUti/u7OxEVVUV9u3bh8uXL/O9lMvl6OzshNlsZoabcN/el1gmqamp0Ov1PH9aaLZGVNPr169jZGQERqMRO3fu5FCYgoICNryjWce5c+c4zCc4OBiJiYkwmUyYmprCv/71L+4Obt68ycUSfQ4VFRXo6upippeHhwcGBgZw9epVjjYlVTLBdtSxW61WtLS0sPsswXS0pxBEJZFIUFNTg66uLjz//PNs/EamjjqdDn/7299QUFCAzz//fOFw+Vtt9N8r1g2lO126dAnz8/MIDAxEUFAQAgMDWf22evVqhIeHcxXgdDpRWFjIxlIajYaFV319fVi5ciUAQKVSITIyEh4eHnj++efZe5wYEtQx5OTkoKamBl988QWsVitXuXS1t7fj6tWrMBqNuHXr1iKbYJPJhJaWFthsNiQlJcHhcDCnuL+/Hx4eHoiKimKvCqJPUut6/fp1GAwG9r5+/fXXAYAXa29vL5KTk5lxcO7cOWRmZsJsNnPeLV3l5eW4du0axGIxp16R6MxkMjEssmLFCjgcDixfvpyd8wjTJiiBWA30+mfOnOFhn5+fH9avX8+LH3AxMsgy+syZMzAajRgdHeXwhIWGTNRlzM7OsuXuvXv3oFarmV8dFBTEUIyXlxdXh21tbQDAjB+j0YjY2Fjo9XqeK7S0tKCmpgaRkZGLbLCTkpIwODjILIgPP/yQ3S7HxsaQlJS0aIBIHvERERFoaWmBxWJBdXU1JicnWaFJ9F9ysARc2D5VYiRmcnNzg0qlQl1dHePwdrsdNTU17BBJxUlubi6MRiOGhoYwOjqKO3fuYO/evfx8P/vsszwEVqlUmJ2dZadI8qRvbW2Fp6cn/P39UV5eDm9vb/T39zOzjH4+MVgWukMC4HQyGqT7+vrCYDAgPDwcN2/exPPPPw+dTofPP/8cd+/exT//+U8MDAzgwIEDWLVqFXQ6HXbt2sWvV1hYCIvFgvb2djQ1NaGnpwfXrl1DbGwsZDIZ0tLScOjQIej1emg0GvYGstvtfJj5+PgwC6mvrw/V1dVMcSTVPB2yUVFR0Gq1+OUvf4no6GgMDQ3ho48+wuuvvw4fHx8cOHAAa9asQWxsLNttA66umIoFi8WCU6dO4ciRI4iJicHmzZtZ7CQSiXD9+nWu3KkgA4CjR4+iq6sL7e3tuHXrFqxWK6qqqpiEQPnLADi8Rq1WIzExETdu3MAf//hHvPfee+jp6cHTTz/NhoL/TwumALCLn9lsZr5uVVUVK91ITLDQBmF+fh6RkZFISUnhiprEJH19fbBYLNz2ExaXlZXFOZuU6CORSBgj/clPfoKhoSEe5NDl7u7OYhcKKDCbzbh+/TpXjSSOoYFvcHAw2xxQi0mwCVFEy8rKCXyDkwAAIABJREFUuKLv7e3l4SBV9OHh4TCbzbh16xaHXWzbtg0dHR38vhYmTFE119HRAQ8PDwwODuLOnTsYGRnB9PQ0V0d9fX2w2WyorXXZEpGt7vz8PA+EiVufmJiIixcvIiEhARKJBEVFRQBcQ0DyhVepVCwKI+x6cHCQB7BeXl5IS0tb9JlTV0UwEWHZtHnSAjKZTDCZTOxXT/RLggTm5+eZpjgzMwO1Wo2WlhYkJiZiYGCA74+7uzuMRiOkUikKCwvR0dGBnTt3oqGhAQMDA8jJyUFGRsYiSmBYWBgsFgsGBwchlUrR29sLjUbDClVKNPPw8EBoaChGRkaYBikIAs9ZiI1D0CQNMg0GAwYHBzEyMoKmpqZFvvvDw8NcXUdHR+Ptt99GVlYWli1bxhAQAJ5fOBwO5qKPjIxgfHycacuCIHClTFRe6uASExPR09PD+hEAzGwirLurqwtGoxEDAwOcevXOO+8gMTEREREROH78OGQyGTZu3Ija2lruUPv7+/lePvroo9yViUSu6EWZTIazZ10muMQGo+Ah0qVQSpPD4cCxY8cQEBDAdsfU2VAiFs2PPDw8eH70yiuvwGw2Y8mSJaitrcVrr72GM2fOIDw8nN1p09PT+X0SiYE2bovFgjVr1uD9999fxM0vLy9Hamoqi/Jo5jU+Ps5Kd3oWyLyRdDy0bumAJzafWq1Gb28vAgICUFhYiIGBAUxMTEAqlf4XC+1vc32voBsSMPn6+rKnx8zMDPr7+6HX6xEWFob8/Hw+zcRiMfr6+tg0CgAGBwe5jQfAxmNdXV0skZ+fn8fGjRvR2NjIlarT6URUVBRTqMisiCbcxBemBw8A+7bQQLejo4MdNi0WC7vxAeDFT7Qxeig1Gg3i4+M5n1WhUGDp0qU8VN64cSPKy8tRXl7OVevAwADMZjMsFgs8PT2h0WiQmZmJzMxMtLe3AwBSU1MxPT3NsJJareZqdGpqCt7e3ti2bRtKSkrg7u6OhIQEztek4VVDQwO8vLxgNBqh1Wqxe/dujI2Noa2tjVWGZGxGqmStVovQ0FC0tbUxHxhwdSVyuRx+fn7o6+tjWCQ7O5stpfv6+qDRaBg2oU2IxEvh4eE8DA0JCYGXlxeKioqgVqtZkGa1WlFSUgKZTIb6+nqMjo5Co9EwLNLT0wOz2cxpUR0dHQgICEBVVRWcTlfeqJeXF2pra9kREwCWL18OpVKJoaEhTrKin0fPUGxsLOx2OwYHBxEaGsoJQdeuXUNaWhqampqYzkqdKPHOe3t7MT8/j/b2dqSlpaG6uhqBgYEIDw9Hf38/kpOT+eAhsRZ1rg0NDRAEV0rRli1b0NjYyN0V2UtQqMrs7CxSUlIwPDzMWhAAHAxDgfLEKXc6nYiPj2cMPygoCNXV1YiPj0dVVRUmJydx4MABtLS0oLe3F1FRUSgqKkJdXR1GR0cxNjbG1s3EElm7di1UKhXDLjKZjLu3oaEhbN68GQ0NDcjKyuL7T9CSSORKPZuenuaBssFggN1uR1RUFHvoE3uGaK/R0dGs7fD19UVSUhJX6lNTU+ju7sbDDz+MwMBAXLhwAQDw0ksvISwsjLt0QRAwOjoKm82G6upqPPbYY0zHJSaX0+lka5GysjK2KCGmTVRUFHx8fLhQ0Wq1nIDn4+ODS5cuQalUYsWKFZBKpWxJERMTg8HBQWRlZWHVqlU4d+4c3Zv/9zB6co2k9sfhcKClpYUzU729vfnkJOFLaGgoh3E3NTUhOjoac3NzbCXQ39+PrVu3IioqittUwJVATxLk2dlZZgDQZkAujJmZmVi9ejVu3brF1TldNpuNOenNzc0ICgrC0qVL4eHhgfz8fP6AARecER0dDbVaDblcjoSEBOh0OqxZs4YVlhs2bEBaWhrn0Xp5eeH27duYmJhg7rrFYuH0rOzsbISFheHhhx9Gbm4uAOD27dsAgJ07dzIfmd7r4OAgdxmPP/44C0eE+1a/KpVqUZxfZmYmGhsbYbVasW7dOty7dw/j4+NwOBzYsGEDfxb0udEiIOe92NhYlJSUIDQ0FL/+9a+xevVqxMXFMY8dAPbv388xhOT/HhwczNXP5s2bF200KpUKqampbPtMhlI6nY67lMcee4yZLCkpKVi3bh0UCgXi4uJQV1fHFZPBYEBCQgK2bt0KNzc37NmzB8XFxVAqlejs7MT4+Dg/L7/61a9QVlYGsVjMqkjScUgkEhQXF3OOalJSEvz8/DAyMgJfX1/ugOrr61nFm5aWhri4OPZXIfYTWTqTupI48KtWrYJcLkdqairkcjkfAgMDAwyJvfbaa6zfMBgMrCineYndbsfSpUtZF0KJVwRnmUwmREVFoa2tDZGRkXA4HNBoNFi9ejWz1Wpra/kwI2fLixcvYuvWrRCLxdi8eTOGhoawfv16JCYmIjY2FrGxsYs20MLCQkRERCA9PR3j4+PcUQMuGI6ETpQLQUZt1AGNjo7C09OT2UGenp7Ytm0b01vtdjucTieam5shlUrR19cHsViM//iP/8DPfvYz3kQjIyMRFxeH9PR0rFq1ikNtvvrqKwDAihUrIAgC9uzZg4yMDGYCBgcHswLcZrNBrVazcI6cK2m2pNfr+QCVSCRsZLbQFHF8fBw+Pj54+eWXERsby+ylxMREeHt7Iz4+Hv7+/khOTuY95cyZM7QNfauNXvRdW4D/G5dIJBIAYMmSJYiLi8OdO3eYO04Ziw8++CACAgIWiW3IiIqc/CorK9HR0QG5XI7w8HAUFBQw84JgAHoQqBXt6OjAxx9/zKrB2dlZLFmyBDt27EB/fz9u376N3NxcHDzoykJXKpU8wNLpdJicnGQPl4mJCeTl5SE3N5cX0Tc5siMjI4yDL2SGBAYGorW1FWvXroWbmxtT68g3e2ZmBq2trdxllJaWIjMzk+17L168iNHRUYyMjAAAoqKikJKSgtTUVJw6dYpl/VQddHd3Iz09HbGxsfxzCB4jvHx+fh6hoaH8db1ezyIzysgk9smbb76JxMRE9Pb2wsPDg6s2yqEdGBhAd3c3amtrMTc3h8lJVyhZREQEUlNTkZWVhba2Nty6dQu7du1i/vPly5eRl5fH0nQavM7MzECr1SI1NRU9PT2Qy+UwGAxQKpXs2x4fH7+o+5JIJHj11VcRHR0Nm82G/fv3AwAPI728vPDyyy8zzESUWgDsKWO1WvHQQw+hpqYG+fn57Ox58eJFPiRo2EwbEQWkkDd6X18fCgsL0dzcDLFYzJCj0WhkzQfNeD799FOUlJRgxYoVjGfLZDJUVlbyIJuYKERcWKh0jo2NZWERMaloHZDlRGJiIlJTUxmrdzqd+PLLLzEzM4MdO3YgPz+ffZxI3elwOKBQKKBSqXDv3j1MT0/j8ccfZ759VFQUzGYzPv30U8zMzCA0NBTNzc0AXLkQ1K0HBwejoKAAsbGxeOeddxAUFITS0lL09fXB6XRienoanp6eiIyMhEKhWKQU/+KLL2C32/GjH/0IgvB1BrNIJML09DSqq6sxPj4Oq9XK7rje3t44cOAAjh49in379qG0tBTvvfceLl++DJlMhpmZGe688/Ly0N/fzxvytm3bEBYWhkuXLrE9QV5eHiYnJ+Hh4YHU1FSeDVksFri5ubE1iEQiQUlJCZKSkrgroQOsoaEBvb29MBgMGBsbQ2hoKNasWYPjx48jNzcXv/vd73Djxg1cunQJ/f39MJvNC9lHdYIgLP1v99jv00YfExODwMBA6HQ6ZqMkJSXBarUiOzsbDQ0NKCoq4iAHGnjQpLu1tRUTExNQqVSQyWSstKPBJ8ntqXV2c3PD4cOHudUfGhrCsWPH8MADD6CpqYlj2axWKwcwk62qSqVijwxq43ft2sWbNdHhSAZOG+LExAQ7/lG2bV5eHmQyGXNwabERY8BisbAIzGaz8aHj5eUFrVbLjI+pqSnU19cDAHvAE9NAJpNhfHwcer0eBw4cYAphcHAw0tPTmYpGA0V3d3e2HCAOsNVqRWRkJICvB65EG5NIJJzERYOzkJAQzM7OQqPRwM3NDUqlEiKRCJ2dncxpJwyTDjelUomioiK2qr527Ro8PT2Rn5/PoRJzc3PQ6XQICQnBqVOn8NBDD3FMJNkyqFQqTE1N8SyGBnozMzPMRR4ZGYEgCGhsbMTo6ChjpcTeWag+pDQvq9XK2O/27duZvqvT6fDss89yKpibmxuamprQ1dWF3bt3Q6fTsREV+ZmPjY1hw4YN+Pvf/46ioiJIpVJER0fDy8uLh8NisRi7du3CyMgI04gTExPR3t7OnS0dSJRGNjQ0xK6k5COTlJQEuVyOpqYmbNy4EfPz89BqtdDr9RgaGkJqaioiIyMhCAIiIiIwOjoKqVSKiIgInDlzBsuXL8elS5cQHh4Og8GAzMxMCIKA7u5uGI1G/OIXv0BFRQXj7ESLBsD0WIJXad5BQ+menh6IRCJs2LABIpGI84F37NiBO3fuQC6X83yCZidubm6snPby8kJ4eDh8fHyg0+lgMBhw6dIlzrF47rnnMDMzg5///Oc4efIkfv3rX7M+hpTClDwlCALGxsb4M6cZESEK4eHhyMvLw7Vr1xAcHIyAgABMT09zMplEIkFeXh7TJ2lWMjMzg4SEBEYOqGulBDaCxUQiEb766its3LgRn332GbOwqGMgmHBB2Pq32ui/V9ANVSO5ubnYuXMnoqKiIJFIYDAYcPr0acbJlEolR8HRsJJuaG9vL7Nw2tvbedhBp/Xc3BzKyspgsVgQEBCATz75BCUlJRCJREhNTUVubi7OnDmD4eFh6HQ6Nl0iChsZGY2Pj7MT5s6dO5GWloYbN26wICo/P5/pm7SJWq1WaDQaTrEh9oFEImHDL2qzqSU1mUz429/+hpGRERaekB0DcbgJjhkaGmLsm4yeCHOVSqXMAz9//jxu3boFm83GYQrE/nA6nTy7MBgMjB0TjbS5uRmJiYncftJweXR0FG+++SZCQkJQXFyM8PBwhISEoK2tjTsuYr2IxWJ+UIk3TweGTqdDf38/BEHAV199BYfDgfXr1y9K7BGLxZiamsLp06exY8cOTE9Pw9/fnw+lvr4+dHV1IS8vjx0KCTu9d+8ePv74Y+4Ob9++Db1ez1X4/Pw8lixZwsEndFHYBc1ljEYjmpqaoNFoGHYJCwtjnjnNURwOB1P24uLi4HQ60dnZibi4OLa68Pf357yC8PBwyGQyHDlyBE6nE9u2bcOFCxegVqsZ1qQhN2W50mdOJADykFmo/nZzc0NLSwsGBwdRUlLCA8KGhgaEhoZCLBajq6uLMwYA19CaaMYjIyPw8/Pj+5CTk4OYmBicO3cOnp6eOH78OAeTk3qTREr0enS40/OtUChY/Uwe/yMjI5iamoJGo8HSpUsRGhoKi8WCgYEBZGdnw2q1sqhNq9UiKCiIWXPl5eVsyREUFITw8HAsX74cx48fx1tvvYW1a9fi97//PbNlFl4EuYhEItZPkDHbQi8mymKgipq6ofT0dNy+fZuRAgBcVAYGBvJrqNVqJCQk4Pr166irq2Oe/Nq1azE8PIyrV6/Cbrez/QMdZlTU0ixgQRHyfwa6EYlEHwF4AMCkIAgZ97/2RwBPAyBd878JgnDh/v97GcBTAOYBvCAIwn8bVU4VPQlmdDod3N3dER0djYiICEilUratJUbOxP/X3psHx1ld6f+fV2uvakmt1r7Ltixv8r7bgPGGWQyJAxMgAQKTpbL+JlUzyW+q+E0ymUm+mSTfEIakkklgAgECCV7YwWCDAC+ybMu2hKzF2q1dLam7tbSWfn9/SOdEyjCBJOAt/VSpJL1qte5tvX3uvec853k6O1m4cKHusJOSkvD7/crfve6662hubqaxsZHbb79daYIJCQk8/PDDwB92QKdOndJgBpM7Zel2k13edK9NKbYIpdFisagUrdPpVBs/yVsvWrSIuro6XC6XMhyKi4u1UCa0MLEMFPOTBx54ALfbrQHTbrcr3VO6PeVGkCAkc5gzZw7t7e0awGQuIprV399Pfn6+plF27NjBwMAAgUAAq9VKR0cHdXV13HTTTZw6dYrExETi4uK0jVwalrq6ujh48CAZGRlaCBbZY+H1i/2b0ADnzJmjtYSCggLa29tVz0Zaw4eHh9V+b7ra4S233KK9CW1tbTNMYkRLv7m5WdMau3btwmKxaNpIxNmkfV2kkJOTk2lpadEehwULFvDKK3+4dfPy8pTxIzIHco9Ik1lubi4NDQ309vZy6623YrFYKCkpoa+vj3Xr1umCP32up0+fxuFwsHnzZpKSkrj//vvZuXOn0u5aWlqoqKjQNFpzc7M2vyUlJWnDIEz2ociuVk5JpmmqLMTw8DDz5s2jp6dHC/W333479fX1WhSUjuOenh5dON58800N8hs2bCAYDPLTn/6UnJwcresIQ83r9WpqQlImUkSV4CRjkD4DkQJPSUnRoCibiDNnznDXXXdRXl6ujYSyyEmNoKurSzc0NTU1rF+/XtN6u3fvJi4ujpaWFiIjIykqKlKBNLkPZIOVk5NDa2urvtdTU1N1UyIbMNndJyUlsWzZMmpra+nt7aWnp4f77rtPmXIbN26kq6uLlJQUve+FZhsVFUVJSQljY2N85jOfobKykrq6OgKBAFVVVSpnIhtMEcqLiopShpZkGPiwUjeGYWwEAsCjfxToA6Zp/uCPHjsPeBJYCaQDrwFzTNP8k062EujdbrfKgoq6os1m0xdLuhozMzO1gWXp0qXk5OTQ2NhIRkaGsg/kqBMTE6NSqgDvvvuudlGKKJO0d1utVqUUSrBxu910dXXpTSo+kcFgUAt1Utm3Wq3k5+fT29urXF+Px6NpIqfTSUJCgurKuFwufd7MzEzKyspITU3l8OHDan4uN4Z0p8pnmMzJCvtCHIyEv52SkqK6GaIHLzePvEGko7C7u5uVK1fS2tqqpir9/f26+5YgPT4+TlFREefPn1d6nRx9o6KiNMcsQVlMnOW1HxoaUoqhLEjJycm6kxYLP9ltSbotLi5OG7OE219YWEhKSgoWi4X9+/cTDAbZtm2b5sbFYrGlpYXc3Fzlugt7Ki4uTtMTkq6RdIYEp+lSsG63W990cm9M7weQE1FOTg55eXlUVFSwdOlS1WHJy8ujpKQEj8ejeXzRw0lOTubVV19V1yDpthbhMgnSwqDq7e3VeyopKUkXWFHynH7ykdoFoAqi8rqKBvuiRYtU4qG1tRWfz0dKSgopKSlUVFTQ2NhIUVERK1as4OGHH2bWrFm43W7dYIRCk85ZcuJISEhQSmNERATLli2jqqqKlpYWANW2l3qTvPcADfiSA7fb7SxYsEAbBWtraykuLiY9PZ3+/n71DhgYGOCpp55i586dJCYm8vTTT2uRPRAI0NHRodRi0XYXVpfD4SAlJUXpiyIlEh8fr93Gkj4RE5LCwkJSU1M5e/YsbW1txMTEqL7QqVOntH9HdIscDge9vb2kpaXR0dGhTVDvvPMOa9euxWKx0NzcrAyyhIQEOjs7dZMmTXPCPiwtLZVb78PL0RuGkQs8/wEC/TcBTNP87tT3rwD/Yprm4fd5flNeFNG8GRsbo7+/XwuasmsSTZCsrCx1b4qPj9dOSDEjttlseDwezTOfO3eO2tpa7ZhLTEzUN6tY8Qm1UMwI5HQxPScmN5a88cQVXsY6/c0/fWcTExPDpk2bZrTJWywWLdrGxsZSV1fHoUOHVDp13rx5NDQ0qP2fFD9DoZCyNdLT02ltbdUdqqz0WVlZDA4OApPH0uTkZA1+vb29WjOQWoDcTNPTDxIQBgYGWLVqlRZsy8rKVHu9oKCAsrIy3ZlLI5ssJtPTXtKgJgwiGWcgENAjv3TWGoahXZ6A0v3k9CbFRunWjYqKorKyUlk9lZWVjI6OKs/6wIEDFBYW6slI0oAS6GWnJGkm8RYQiLeB5OhF4yg6OpqEhAQVnILJ4FZQUKA2f6KLJPfYK6+8ol66ZWVlxMbGcu2117J3716ys7PVSlCatGSM08clNE15nWAy0IdCIa0hSPE0FAqxZMkScnJyqKiooKamRuclpjxiYC82l6Lv3tfXpxLLsmhIwbK4uJjy8nLtSxAZcUl3iMKnjEtsPIV2GhkZqfRESTdFR0erTMNrr72mev7y+qelpVFaWsqGDRsYG5s0OK+rq1PWUEpKCsnJySQnJ6tkgUgdi06UbOwkDSYnDpfLpela+Z8LO0Zee9kgirOc1I3OnDnD6Ogoixcv5vz586ptJY+32Wzs27ePhQsX8tZbb7F161YyMzP1PdPY2KjzT0hI4Pz58zPqHFK4lXj95+7o/xpRsy8ZhvFpoAz4ummafUAGcGTaY1qnrn0giByv7ECkoCgCQZLvjo6Oprm5WYuioiQouUhRcwyFQtrRJ/LAbrdbC3dWqxWfz6c7SDmOi5SxBFTZrcLkEV5W8OHhYVpbW1UPXhqNpjf5iGSxFNlEUExYD8ISMAxDm6JWrlxJWVkZLS0tuhMQ7R7J+wmzQnbecrSWG2B0dFR3iMK1l0YpMePu6elR4Sd5442NjTFnzhwGBwe1OCQUURlne3s7+fn5nDt3jurqamw2G21tbarBLnK70g8hJ6tAIEBRURFDQ0Ma6P1+P8XFxfrGNk1T9fJFdEx2+/KmlBRUS0uLqnEmJydr4T07O3uGwfWJEye0WU7SQVKglYK3yPharVZyc3NpbGycEeilmS4zM1NFrbxeL6Zp0tXVxaxZs7TLVuYtJjPnzp2jvr6erq4u7HY7O3bsIBSa1Obv7Oxk9uzZHD16dIZmT2dnp55sZecp91x+fj4LFiygtbWVysrKGWME1PUrKytL054nTpygsrJSTyWyuM2bN4/+/n4aGhooKiri+PHj6u62fft2li9fjt/vp7m5mY6ODk6cOKHNTGfOnNETx/T7UmSUZZf6x13bctKTjm7RjJdT41tvvaXvYSniFhcXA5P6M6L3Ln8HUM2ioaEhysvLaW5uxuFw0N7erkVXQO8ht9utbmQSb3w+34ymQ1mIJD0ncxBVSlEklRpTMBjUWk1aWhrDw8MqxeJ2u7n55ps5ceIE99xzD93d3Zw8eVLf2319fTPo3yIdLSllWYRl0/jn4i/tjP0ZUAAsBtqBH05dN97jse95ZDAM47OGYZQZhlEm10QDXl5Q+cdJDk3ajYXuNDo6qlRFCc6BQIDS0lLtAIyIiCA7O5uysjKsVivLly9XjRpxmnK73Zimqfo1YoAg+iN5eXk6bqkfyE5petdmKBTSRi1h9kgxubKyUivuspgIJ130ePbs2aMmFtnZ2TPmLkJMwqKYLpYEk4tkdXW1jnPOnDmqRyNmHXJ6kZRLfHy8duxKl6nX66Wnp4e5c+fqG0/SR7JTXLBgARUVFSxevFjb0CUAi2qlpGwkPzk6Okp+fj5VVVWaA4VJSm1bWxtlZWW6SMs9IDsaScNJ2ioxMZG6ujqioia9W5cuXariYNKR2Nvby8mTJ7Hb7VrzGB4e1jy77Co9Hg8xMTHKboqOjubo0aP/o/NwfHyc/Px8ampqNADLWEX1UJzEvF4v9fX1WktYtWoVGzdu5JZbbuHmm28mJiaG3CmNk6KiIqqqqvTNK8VV2QCI7MDChQt1fD6fjxdffFGF8vSNNlV4XbhwodZhptcUxsbGmDt3rurQR0VFqbZTZmYmPp+PG2+8kfvuu49PfOIT2tV74sQJpdmKWJ9Y4E1Pk8opcXx8nN7eXpXqFU14gaT1RJbE7/erlaQsFvK1qFc2NDRQWVlJUlISb7/9tuarxb923rx5qnElGyBJX0nOX3bXctpobGxUrj6gjljwBy9jSSXK/3n6hkj8JmRRSk9P5+jRoyr3XF5eTmVlpS4AXq+XVatWaRNfW1ubnniFlGBOKfOGQiF6enpU/0n8GeSk9ufiL9rRm6bZKV8bhvFfwPNT37YCWdMemgm0/S/P8QvgF1PPYQIqNiZ59um5YTn2SwFMiikw2YK/ePFiPWbV19czd+5c7HY7NTU1ZGdn4/P5SE1NZd++fVgsFsbGxujs7NTKumEY2q03NDTE5s2bOX36NH19fbz77ru6qt99991897vf1Z2m8PLlnyC7L7nJpBgpbkOyeJw7d44333xTaxCVlZUqEnb48GHV/G5qatKFReYrpiTj4+NKC6uvr9ddC0zqdDz22GO6WxHLQGmRl6ApwcQ0TTweD6Ojo9oIBShT46abbiIyctJCsaKigqysLNWckeKfvAZyBDZNU09W8oaTU4Vg69atPPLII9oUJmqAgObzZZcrR9fa2lp27typloDBYJCTJ09iGAbr16/XnVpaWhrPPfecqpnKrkxa6YWlZRiTaoMSxMfGxmbYCALcf//9VFdX097ezvnz51W3RvTo5R4Qvr5pmhw9epQVK1YwMjKiJIKf//zn3HHHHZSXl6uJfUxMDIcOHdIcupwyJFUZCATo7u4mLi6Orq4u7SSeN28eK1as4P777wfg29/+Nm1tbbS1tbFp0yZ+8pOfaOCU8Z49e1bfY3J/yf0iktJjY2NKW+3o6GDFihVqYCIbKll05KQtAmLyfpCi/T333KMc80996lMA/Md//IdubmJiYnjggQdU/VP8HAYHB5XmGBUVRWtrK0NDQ/j9fm677TZtkCwpKeGuu+4iFAqpxK+cuOvq6lQ8UDaJsqMXPv7g4CCf/exnyc3N1ffqpz/9aaKjo/nXf/1XDMPQcbW3t/PQQw+p6qfc80JikOc/c+YM27Zt0wYqiW1z5szB5/Op5pD4RTudTtrb22ekiPr7+4mLi6Ovrw+fz8fHP/5xrr32WqxWKyMjI/pafmAIBetPfQC5QMW079Omff3/AL+d+no+cAqIBfKAeiDyAzy/+WF/GIZhRkREmBEREebUQvJXPddf+xwf9Yfdbr/oY7iSxvpe/++IiIiLPi75sFqtf9EcLtWPi/3ayut5Odybf/S/LfsgMfx9d/SGYTxDDaVoAAAgAElEQVQJXA0kGYbRCvx/wNWGYSye+kONwOcATNOsNAzjaeBdYBz44vsxbj4qTFtEPpTnutQhhdfLAZfDWN/rfz49z3yxMf309r/hcrhvBRf7tZXX83K4N+HP/99eUp2xVquV5557Dr/fz8mTJ5k3bx4dHR0qWjQ9Z+/z+TQNIL6kIiAk+VhhaFgsFtxuN3a7XdkkUjCTDtycnBx8Pp/m5kOhEF6vl1/+8pf4fD5NC8XExLBv374ZedmKigotygaDQW1AkkaTUChEX1+fFu/k+eEPBt42mw273a5t5bGxsdjtds0fy1FYClTStRcKhWhra+ORRx7R5imYZDA99dRTysiQZq3x8XH9m8LYkAaQzMxM+vr66OnpYWJiQhuQpEgtaS4pUrvdbm1NF6rm9HGlpqaqQ5XQxJ599lmV4w0jjDD+alxeEghRUVF88YtfJDY2VoWZpksRSzdkW1sbVVVVDAwMzNDSlgLL9Mq15Holdyy5ydjYWFWRk9ZpoUKuWbOG0tJS5e5LFd7pdPKFL3yB73znO6SlpWk+Vcy8hUHQ1NSkEsbyt0Oh0IzmGik2Cr9c8uRyXRo5oqOjtREoLy+PlJQUzfcnJSUxOjqq+Vrh9X/zm98E4JFHHlETB/GqlOJSd3c3TU1NjIyMzOhSjYiImMEwkBzkvHnzqKqqmsEoknlI3cA0TWw2m8opCAvIbrdjt9uVHmcYBl1dXXz/+9+/cDdYGGFcufjI6ZUfKh577DHcbjdPPPEEP/jBD9i5cydWqxWLxUJnZycnT55k4cKFujOWIBUREYHdbld7N2EUSCFEApYUOmByFy12grfffjt+v5+SkhKlHEpwEsmErKwspXEZhsHrr7/Os88+y/z587Hb7bS3t9PZ2YnFYmHDhg1s3ryZEydOqByvLFSyE5ZFwuVykZ+fz+nTpwFm7HKFay+NIhkZGfh8Pt555x36+vqIi4vjjjvu4Pz583i9XqVMCkZHR/nWt76lRUjN1UVFsWDBAm6++WYmJib4zW9+o2OTHbsslHJyyM7Opr+/X2mPsmBKMVquBYNBCgoKMAyDlpYWSktLGRwcZMeOHXR0dJCfn09CQsKMcYYRRhgfPS6Zd1xPTw+1tbVUV1eTm5tLXFwcTqeT0tJSQqEQV111FS6Xa4Z+hXibut1uWlpa8Pv9FBUV6e5ePFS9Xq8yS2By97l+/XqlcdlsNlasWEFkZCTHjh0jOjqa9PR0cnNzqamp4ciRIyqrGxUVRX19PUVFRSQlJZGTk0MwGCQYDHLNNdcox3bx4sVqQBwXF6eKiS0tLaSlpWk6ZGJiQtvj6+vrtRdAFiyRixVJgKVLlxIIBKiuruZnP/sZS5YswTRNmpubZ+Q5BwcH1Y5tbGxMu0qXLFlCRkYGdXV15OXlcdddd1FXV6epI6GFikCYsDbS0tLUSk2a2SYmJpRrn5qaqmqNUVFRapgO8Oabb+oJShQHwwgjjAuHSyZ1I+qAO3fuJDo6mszMTCYmJqisrOT48eMsWLCAkpISdu7cqUFSUh/SkTg2NkZFRQW5U1r0wmEXPRzZ0cqu2uv1qiXZ6Oio2sdJM9LQ0BBxcXE89NBDxMbG4vP52LhxIx0dHWzatIlZs2ap5nhZWZmKYy1cuFC5rhJ8pUknOjqa06dP43Q6CQaDZGRkzLAkE+6w7JIl6AqFLy4uTs2ehffr8Xj40Y9+pDxhmOx4vO6661TG2OVyafdof38/Q0NDqp0vr51QxkTfXfLtQm0EVINbGq2E8ijyBa+88gp33nknhw4dIisri5SUFOrr65k/fz7Nzc288MILREVFXTZFrzDCuMRxeaVuhIOcnp7OwYMHNecruiCvvPIKt956KzDJr3Y4HJw7d04Fn6TtXhqeRBUvISFBA7jkl+X3k5OTKS8vZ/bs2TQ0NCgH/sSJE6xZs4bY2Fj+67/+C4vForvQM2fOqCTC8ePHSU9Px+fzsWTJEn7+858TCoWYPXu2CjylpqayZ88erQ1MTEwQDAaVCy9616tXr1YjbcnpS2dvKBQiKSmJmpoaent71eqtqamJYDDI448/rr8nGB8f59FHH+UrX/mKyuNOTEywcOFCnnrqKZKSkjQXn5qaypkzZzh9+jTp6ekqGNXa2jpDFygmJkblmaV+IKkxqTPccsstHDlyhKSkJJKTkzXNBPDcc8+pL0AYYYRx4XDJ7OilQSUiIoKcnByuueYaDMNQNb7Y2FhlgYgOTWVlJVdffbUuEhLwxQWopaVFjalXrVo1QzhLOuCk89RisTA4OIjT6aSqqoqysjI9KUgBVHTwRYEwKSmJefPm0dzczMqVK1VzXAqtdrud1157jR07duguXbreRC9Hvu7s7KS8vJyrrrpKG25ktyw7amne6Ovro6OjA4fDwcGDB1XdDtDCqiwakZGR3H333cpaCgQCeDweZRIJm+fFF1/kwQcfZGRkhJGREbxeryp+ioQwQHd3N/v37+eaa67R9vDpi4ycmgzD0FNLMBjkqaee0utioRZGGGH81fhAO/pLxhxcAsbExAT9/f2Y5qTufGNjo7rWSPCIj4/nueeeY/PmzcAfND6mFwXFxKKwsJDi4mL279+vC4EsBvK7TqeT3t5eBgcH8fv9SomUgqMwYuAPBVOhKFqtVlavXq2/I52don8huezpxUv5XtIhMTExJCUlkZGRQV9fn1Iap0uoimaMSBsnJSURHx+v6RNh9wiEZTQxMcHu3bsJBALaadjV1UV0dLTWLQzD4N/+7d/0dRPZA2lnFyaQ6NfMnz9fLQelQxdQYSrpRHU4HDQ2NvL6669rWkoWuDDCCOPC4ZLZ0YtGjLTKR0REcMstt6ibUmJiIjfeeKMW+I4cOcLWrVs1UAlDZWxsTAOJBD4RXnrnnXe49tprNeUgAmOPPfaY8sRTUlI0hy3jkecZHR0lPj5eufCi/XH99dfzxhtv0NHRwSc/+UlsNpuqC4p7vZw4RMogGAyqVO308ba0tKi/rSwWMr/nnnuO5cuXY7FY6O3tpbq6WoMsTAZ32dFLv4BIH5imyZ133smBAweoq6tj165dutAcOHCAb3zjG+oMBSgVMyoqSuUmgsGgvr5nz54lLy9PW9/hD0YLfX19JCQkYLPZ2Lt3r2roy1zk+cMII4y/GpcXj95ut+suVgJjRESEysdK+uTOO++ksrKSq666SnPuwuuW3bqYEUiAFPbIK6+8wtatW7XgmpCQwK9+9SsNUAkJCTMcm+Q6oOMQYS/Z8ctOPzExkZaWFhISEvj4xz/O2NgYJSUl3HDDDRqwZYcsWiayS5aUlOx4Dx8+zLp16/RvR0ZGsnfvXi1C5+fn09bWpkqRYkgiOvmA5tmnp7SsVivXXnutiqdt3LiR1NRU5b4LZVW0UWQhEOMFWfyGhoYYGRnh2LFjLF26VKWh+/v7OXjwIKFQiIULF6p0r4xbHgeEmTdhhPHh4PJK3VgsFt0FC0UvFAoprVB0zh0OB7W1tQwPD2OxWGbw02UXC2iTjsjbRkREsGXLFt212my2GaqOX/7yl2dYnclYXC6X2p4BM1IV0xuH/H4/X/va1/D7/ezZswdANc8lFSNFVOH5iyJkQkKCjlOEoqQbNi4ujt27d2tTmMVi0UVMjFlEkW/Lli36ejqdTt3Jy6I1MjLCSy+9xCc/+UkASkpKZvx+QUEBqamp2O12MjIyyMjIIDU1laysLNxuN8nJyVgsFpVFFgNnOZ3s379fF9y6ujoVeZIaghTK16xZc8HuqzDCCOMSCvR33303hmEwd+5c1q5dy8jICFu2bNGd8D333KOSqDBJ8xMHJaFmSppkuiyqpFGio6P18+joKH6/n/r6es2r//SnP9XmIklbJCUlqW2epByKioqASa/Ta665BtM0mT17NmNjYzz66KMAypYRmQVRixQpXYfDoQFQCpRCmRRNfrfbrTt6SWfNmTNHGTCSQxcap+jyC9asWaPUyenuUgBPP/30DDlgp9OpFm0pKSlqqu7xeFS32+Vy4Xa79bGhUEgX2sjISJ566imVXP3CF76gf++mm27C6XSSnJysypGyaIYRRhgXBpcMvXJ4eJirrrpKWSvf/OY3cblcNDc309DQwKFDh9izZw+HDh1SJ3i3263yoDAZ1KebNQiTBlDWSltbm7bnp6amUlNTg9vtJiUlhXfffVfF/QcHB9UKsLCwkMjISG3mysnJob29nbNnz3LttdcSCoU4d+4cS5YsUfncgYEBioqKiI6OVhcah8OhFnqyYJnmpJWZFECDwSBWq5XKykoyMzPV2ScQCLBixQrq6+txOBw4HA7i4+OpqKjA7XazfPnyGfK/mZmZdHR04Pf7qa2tZdmyZVRUVCjr5V//9V9paGigq6sLi8VCZmYmLpdLTwryXKFQSBch0fYRGzaPx6OGLrKoTExM0NDQoM5Bos++atUqWlpauP7661WzP4wwwrgwuGRy9CKAddtttwH8j7SLy+XixIkTrFixgsbGRlwul/p8Su5XCnxCTwwGg8pbl8/9/f1qojw0NERSUhLf//73+fu//3vl34vetMvl0vx0S0sLL730Etu3byclJUV30ENDQ6rPMz4+zu9+9ztuu+02RkZGlH8vO3KRGBBHo+kNUj6fT3fEr732GitWrKCpqYnVq1erK9QPfvADVq5cSXZ2ti4aNptNTwXBYJAHH3wQmNRPl3qDGCHMnj0bp9NJWVkZDodDnbEef/xxfvWrX2G1WklKSlLNbJFvEK9Xr9eLxWLB7/fT2tpKaWmp8u7r6+spKysjPT2dnp4e1aIvLCwkLy+PEydOkJWVhc1mY2xsjF/84n2N68MII4z3x+WVoxd3pyeeeIJz585pukMChgQcCeJi+BAbG6t5cqfTic1m0+Kn7OIlHy7aN5LiEcXF3NxcnE7nDKEu0zSVhii5coCjR49SXl5OT0+P5vjFVT4UCtHV1YXD4SAzM5P+/n41CggGg+pFK88v5g1SKJX0klA0Z8+erUYGjzzyCFu3biU7O5usrCza29vJyMjQxcE0zRm0xdOnTzMwMKBCYlarVV+D9PR0ent7ycnJUfNkea3EREKKulI3kJSNaZr4/X5NO9lsNhITEykqKuLee+8lPz+fyMhIrr76alatWsXSpUvp7+8nOzub+Ph4ddMJI4wwLhwumdTN9u3b6erqorKyksOHD+NyucjJyaGjo0Nb8+fPn8/AwAA+n48333yTnTt3zggcY2Nj2n0qPG6R5Y2NjcXj8agipnDZY2JiWLVqFQMDA0RERKi7/fHjxxkYGFDHdjn5jI6OUldXh9frJSEhgeXLl5Oenk5CQoI+vqenB7fbTXR0ND09PbhcLhwOB8PDw5qbt1qt6qUqi5pYIQ4PD2uX8NDQEB6Ph1OnTumCFAgEyMnJUduxvr4+mpubZzBZpNC6cOFCcnJyiIuLU/s8t9vNyZMn1eT6tttu06YoYT2JVITIMwifXrqHZWESy7zExET6+vpITk7WRrLBwUE6Ozux2WwMDAwwPDxMbGxsmEcfRhgXGJfMjv6ZZ56hoKCAj33sY2RnZ2vRMSUlRfPGVqtVd7+Sq5bdcWxsrHaSSn5dGDhWq5WYmBg6Oztn2N0Jo6S9vV3z+16vl+eff57a2lpNjUx/rhtvvJGrrrqKoaEhGhoayMjIUHNfCYa5ubmMj4/jdDr57//+b6Kjo9XYXITUpnPcY2NjdScfGRnJtm3bSElJweFw4HK5WLBgAbt27VL7s7i4OHp7e6mqquLo0aOUlJRQW1tLc3Ozvp4Wi4W+vj7Kysro7u6msbFR00U2m413332XoaEhbDYbhmFoikq8MEV2WTx6xShZrOIiIyOZN28eO3fu1Mat1NRUzp8/T2RkpHrxivdmMBjk9OnTPPvss1RUVFyUeyyMMP5WcckEemmoCYVCLF68mJdfflkVEe12O7/61a9ob28nGAySlpbGF77wBYaGhhgfH2d0dFTz87LTHh4eVgNvETVraWlheHiY6upqLbr29fVx5MgR1U53OBwEg0EWLVrEunXrWLduHStXriQtLQ2AhIQEkpOTKSoqwuFw0NHRoQYoorn+0ksvEQgEGBoa4vOf/7zu1i0WC4CaAE93jxfGz8TEBHa7nUAgwL59+7Db7fz617/WjlW/309ERAQDAwNYLBaam5s1eE+HUCVN08TlcumiMjg4yHPPPcfIyAiBQACXy4XVauWZZ56hvb2dpqYmNdcOBAL09vYSDAbx+Xzqd+vxeLBarURGRvLMM8/g9/sZGhriRz/6EZs2bWJwcFCbo+rq6mhtbeXgwYPU19er3HEYYYRx4XDJpG4AdXuCyS7P3t5eVT6MiIjgd7/7HZ///Od1t3r06FGGhoaoqakhGAwSFxfH+vXrGR0dJSkpidLSUo4fP66NSDt27CAUCpGZmcng4CBWq5V/+qd/Ijk5WU20IyIiiIuLIyEhAYfDAUyeCHJzc6mrq6O/vx+73U5SUpLKJkgQf+CBBxgbG+PJJ5/ku9/9rqZl9uzZQ21tLS6Xi7Vr17JkyRJtmBocHMTj8bBv3z6OHDmC0+nk7rvv1g7Z2tpaPv3pT/PII49w/vx5/uEf/kH7DBobG0lISMDpdGqaSDpjMzMziY2N5ejRo9TU1LBo0SJGR0ex2+00NDSQmprKqVOnKC4uxuFwMGfOHB566CH8fj/33nsveXl5DAwMKAtIWDV+v5+vf/3r3HvvvSoTvWjRIkpLS/nSl77E+fPnaWpqUjaUiJ05HA5aWlpmdO+GEUYYFwYfxDM2C3gUSAVCwC9M03zAMIxE4CkmjcMbgVtN0+wzJrmODwA7gCHgbtM0T3yAv0NsbKy290dHR9PX10d+fj4ul4vR0VGGhoaIjIyktrYWh8OB1+tl586dFBUVsXr1avbt28f+/fv56le/yjvvvMPGjRsJBAL09PRw3XXXcfToUdauXUtvby/x8fHExcXxz//8z/z0pz/FbrdTVVWFx+PRxitJdSQnJ6tOTFpaGoODgwQCAR3TokWLSExM1PTHv//7v+Pz+bQH4Prrr8c0TXw+H2+88Yby92VxiouLIzExkfvvv5+hoSEGBgZYtGgRQ0NDvP3227z66qt6mpGCcU5ODp2dncq5n663D3D+/Hmtbfh8PpxOp9I8o6KiCAQCbNu2jYGBAV0Io6Ojueuuu3jzzTd5/fXX+cxnPkN1dTVPPvkkPT09JCUlsWvXLr761a8SExNDIBBg9uzZlJaWMmvWLAYGBnjooYeIj49XnZ7CwkJKS0sJBoMkJiZq8Pd6vX/enRpGGGH8xfggqZtx4OumaRYBq4EvGoYxD/gG8LppmrOB16e+B7gOmD318VngZx90MC6Xi66uLs6dO8e2bduIiYkhISGB6OhoLZzK7vn48ePMnTuXgYEBWltbaWpqIjY2ln/8x3/k1KlTeL1eurq6WLRokVoHzp8/n/7+fsbGxjh//jydnZ1861vfUiepFStWUFVVRUtLC/X19aqa2d3drfnvkZERzp8/T01NDd3d3cq5Fz76xMQEx44dw+Vy8eqrrzIyMsLp06cpKSnhtdde495772X58uVs376dW2+9ldraWvLy8ti1axeJiYlqwPLkk08yNDTEli1b+M53vqO5fGmqGhgYUK66pFqmFzl7e3upq6sjKiqKFStWaK1BqKOGYeBwOLTT9YUXXsDhcPDiiy/yk5/8hE2bNvHaa69x8OBBvvrVr1JYWMi9996Ly+Wivr6el156iYaGBoaGhiguLta8vrCghHtvtVpZtmwZOTk5zJs3D5fLpU1nYYQRxoXB+wZ60zTbZUdumqYfqAIygJ3Ar6ce9mvg5qmvdwKPmpM4AsQbhpH2Af4Ofr+fqKgoOjs7qa2tpaenR20ARUjMMAwKCgoYHx+nqqpK0yhWq5WCggJ6e3sJhULEx8frCWD9+vU0NzcTFRXF8PAwb775Jm63WzttrVaryiJkZmbidDppbm5meHiYlpYWmpublW5YU1NDe3u7yvlKt6jstiU1FBkZyX333cdNN93E3LlzcTgcFBQUUF5eTl1dHX19fezfv5+1a9dy7tw59u3bx+7du8nOzubw4cMsX76clJQUent78Xq9REdH43A4tGCamppKdnY2TqdTWTHTG5FEBjghIYHExETsdrvOU2QcvF4vJ06coKurSwXW+vv7KSkp4YUXXiA5OZldu3bR39+P2+1W/v/SpUtZsWIFhYWFzJ8/n9raWux2OwsWLGBiYgK/36//U6Fh5ubm4nA4iIuLC+vRhxHGBcaflaM3DCMXWAIcBVJM02yHycXAMAzpa88AWqb9WuvUtfY/9dymaXLgwAHa29vJz8/H6XSSkZHByMgI586dIxgMqvnFoUOHlMI3MjLCmTNndMfrdruprKwkJSVFTb+ffvppnE4nubm5LFy4kHXr1hEbG6tc+0AgQFNTEykpKeTn55OYmMiePXtobW1ldHQUi8XC6tWreeaZZygvLyciIoJNmzZpa7/L5dLGpYSEBOW3//CHP2T+/PnceOONeDweDhw4gGEYLFq0SHPkfX19bNmyhT179pCSksJLL73E1q1bmT17Nvv372f79u1avB0bG8Nisag2vtPpZPPmzXR2djI4OEgwGKS1tXXyn5CRQUpKCvHx8Xoq6ujoUHqm6NBs2LCBmpoaduzYwSuvvMJ1111HIBDgc5/7HDBpYPLGG29gtVo5efIkDocDt9utJyuv18vGjRuprq7W/6MUbaUr2WKxaBdtVlYWhmHw6quv/jm3XhhhhPFX4AMHesMwHMAzwNdM0/T9iV3Ze/3gf7TfGobxWSZTO4rMzEyKi4tJSUnB4/FoKkfoe4mJiQwNDTFv3jx+/vOfqzZ9TEwMp0+fpqioCL/fz80330xXVxd+vx+v18ucOXPUVDwpKUldm4QyOT4+TkxMjPLuY2JiWL9+vdIObTYbp06dAuCGG24gJiYGp9Opz2MYhnaDSt49GAzyuc99jt/+9rfU19ezd+9etm/fjtfrJSIigqamJhYvXszBgwdpa2tj2bJlBINBTp48SUtLC7Nnz9a/Jbz8np4epYZarVZ8Ph8Wi0XHXVVVpa/l8uXLsdvt2jUsFoSyGPX29v6PBqnIyEhKSkpYtWoVERERjI6O8tZbb3H77bdTXl5OcXExDQ0NnDp1iuHhYTo6OlizZo02svX09OBwOLTYmpCQQE9Pj6po9vf3k5SUxFtvvfVBb7swwgjjQ8AHolcahhHNZJB/3DTN3VOXOyUlM/W5a+p6K5A17dczgbY/fk7TNH9hmuZyad81TZMlS5aQk5OD2+3WbtjBwUH6+vqYmJjg2muvVW/V++67D7fbTXd3NzBpBNLY2EhnZ6cKdXV0dDA8PKxdrDk5Obz11luq6CiFUKvVSmdn5wxjjXnz5pGbm0tBQQETExPK/Q4EAjME1DweDxMTE/h8PtLS0pSHLvLDERER5OXlERERQVdXF93d3SQmJlJeXo7L5WLVqlUqlTAxMaHqkTU1NarkKewewzDo6urSlJTw2l0ul5qLC6qqqjRVYrfbVaGyq6uLxMREAOX0nzlzho0bN9LV1UVBQYE2SxUXF7Nt2zb6+vrIyMjQRWzdunUUFhZSVFREQUEBNptNO26lntLW1qY9Dz09Par1f+jQIU6ceN/afBhhhPEh4n0D/RSL5ldAlWmaP5r2o2eBu6a+vgvYN+36p41JrAYGJMXzfvjtb387QyhLWCyRkZF8/vOfJy8vD5gM6kNDQ8q+KSwsZN26daxZs4bFixfr8y1btozly5dzww03kJGRQUdHBykpKRqk+/v7tagZDAbp6+vTwGS1WklLS+Ptt98mEAjoczY0NPDMM8+oVLF0kwYCAc6ePcvg4CCjo6OaHnG73Tz33HMMDw/z7rvv0tTUxOjoKDfddBOmaZKfn4/FYsEwDN58803q6+uxWCz83d/9nerIG4bB8PCw5tdHRkY0Dy4mKo8//jjnz5/XcdbV1amzlN1uZ2BgQLn79fX16q8rzJiDBw8SExNDW1sb3d3d2Gw2GhsbVZI4Pj6enp4ejh8/ztmzZzFNk/PnzzMwMIDX68VmsxEIBLSnwOfzqYFMRkYGCQkJPPvssxw6dOiD3AphhBHGh4gPkrpZB3wKOGMYRvnUtf8X+B7wtGEY9wLNwCemfvYik9TKOibplfd80MGI0uKxY8dITEyksLCQ1tZWfD4fb7/9Nq2trXz729/WBimhIIqol+yAExMTqaysZM+ePdx+++1ER0ezfv16Fi9erEFKgn1UVBTXX3+95ralUPnjH/+YuLg4Vq1axbPPPqtjNAyDDRs20N/fr0Ybs2bNIhgMcuedd/Loo49qTj0YDFJVVcUnPvEJCgsLVU5AirfDw8PU1NSQlZVFSkoKt956qxqbNDc3q+aNSB50dnby9ttvs2HDBjweD52dnfznf/4nGzduVHOP6ZgzZw52u52SkhL6+vo0vbJ48WJOnz7N+Pg4FRUVpKSkMDg4yPbt21UiIiIiQo1MJOUTDAZZv349w8PD9Pf3s3z5chITE/VEER8fj8vlwu/3097ejtPpxOv1sn//ftavX09kZCS5ubk0NjZ+0FsijDDC+BDwvoHeNM23ee+8O8C17/F4E/jiXzKYbdu28fzzzwPQ0dFBYmIiJ0+eJC8vj/vuu4/nn38er9dLMBic4fA0OjqK0+lkdHSUp59+GqvVytjYGHPmzKGiooKuri62bNnCW2+9RUpKygz/17GxMX73u99x991384tf/AKn08nXvvY17r33XpXf/fa3v81XvvIVFUCrrKzURSU7O5vly5fzve99D4CVK1cyMTGhqZj4+Hja2trIzs7G7/djsVj4yU9+QkxMjBYpr776arKysjh79iyhUIjOzk79uc1mIycnhxdffBG73c6RI0c4fvw4ixcvZsuWLSQnJ7No0SJaW1vx+/2cPn0agKuvvpru7m5ef/NlrW0AABRISURBVP11WlpaWLt2LQ6Hg0AgwPj4OMuWLSMqKor58+cTFRVFQ0MDgGrxDA8P8+tf/5qIiAjWrVtHWloaGRkZuktPS0ujublZTwYwmQoqKCigurqa/fv309jYyIYNG0hISCA/P5/Gxkba29vZvHkze/fu/UtukTDCCOMvwCUjgQCTTJG0tDQNNm+//TYej4djx45RX1+v7Jbm5macTucM7XTTNHnuueeIiopSL1ibzcbcuXP51Kc+BaBKjtKs5Pf7mTVrFtdddx0lJSUsWLCAoqIi9u7dS2pqKi+99BKmac7IKW/YsIHU1FQ8Hg+LFi2itraWAwcOsHHjxhnaMBIAr7vuOjIyMnQnX1FRoUyYmJgYWlpa6Onp4fTp05o68vl82jNQX1+vAmkpKSls2rSJjRs3Mjo6SkxMDMPDw4yMjDA8PMw99/zh8HTVVVfhcDjIyspi3bp1HD9+nJ6eHq6//npiY2NpaGggGAyqHMGRI0dwuVx6onn44Ye1s/edd95RFU6bzUYoFFKWT1RUFIODg0RFRalX7Pj4OFu2bCEnJ4f4+Hj1mR0ZGeHqq68mPT39wt5YYYTxN45LKtCnpqbyyU9+kgULFuB2u4HJIq3b7Wbv3r1kZWURERFBdna2eqEK1bCnp4f+/n4mJiY4f/48MTExHDt2THndEjiFLim89La2NlpaWvjSl76kGvijo6O8+OKLbNiwgeLiYpYtW6ZjfPLJJ2lubmbFihUsXbqUzMxMVq9eTSgUYtmyZXi9Xt555x0ANSCRFMjJkyc5fvy4SgLX1dXhdDo5ceIEhmHoTlo0cSYmJsjIyODYsWOMj4+za9cu0tLS6O/vZ+vWraoDtHjxYq666irefPNNHefu3buJjIyktbWVQCBAQUGBNm5t27aNjIwMqqqqSE1Npaqqio0bNzI8PEwoFGJgYEC7g3t7e+nu7ubpp5/Wk4pIPXs8HoaHh5XLL6mq1atXs27dOtavX682j8I2amhoUGmJMMII48LgktK6iY6OZmxsjG3btpGQkEBJSYn6qxqGwe9//3vWrVuntnTSTDU6Oqr2ena7nZiYGAzDYM2aNcTHxyu3Ozo6WumSnZ2dlJeXMzQ0REVFBc3NzRQVFZGenj6j0NrQ0EBzczMTExMAzJ07l7lz56q2/aZNmwiFQixdupSmpiY2btzIsWPHOHbsGHl5eSQmJtLd3U1UVBSzZs3i+PHjqv+yYMECBgcHKSoq0kJxKBQiIyODrq4u0tPTOXPmDOnp6erD6vP5WLx4sS5Yn/vc53jjjTdobm5m2bJlmhI5deoUn/nMZ0hKSlLO+vLly4mLi9Pn6e/vJzc3l5GREebMmUNXV9cMlyq/36+0TCkCd3Z24nQ6mZiYwGKxqDCbz+fjyJEjfOxjH6OlpYWTJ09y5swZfvnLX+JwODh06BAZGRn09fXxwgsvXOA7K4ww/rZxyThMAbrTy8nJobi4mIKCAsbGxhgbG+PBBx8kLy+P/Px8UlNTqa6uZuXKlSrwJSJo+/btIzIykrGxMb785S8TGxurtElJ9bzwwgtcffXVtLe3Mzw8zMmTJxkbGyM/P58tW7YwODjID3/4Q+Lj4+nr62POnDkcPXoUmNS6sdvtREZG4vV6Wb16NYsXLyYqKgqv18vLL79MS0sLmZmZuN1u8vLySEhIUH/WUCjEnj17sNlsyje/7777iIyMxOFwEBkZqZo8VVVVzJ49m9OnT9Pe3k5zczN33XXXjG7hH/7wh8BkfePAgQNqVeh0OsnMzFR55jvvvJPY2Fj6+/s1zbVt2zZgso8gMTGRwcFBZSNFRETw1ltvMTw8jM1m44YbbiA2NhaXy6U1jmAwSEJCAp2dnbzyyis0NTUxNjbG7t27OX36NHFxcQQCAV5++WWCwaAydPx+v3buhhFGGH8VPpDD1CUV6IU+2d3djWmaOJ1O5YnbbDays7Px+XycPHmS66+/njNnzrB27VpNy8AfOjNDoRAej0dNuaOiorBarRw4cICcnBwOHDhAbm4uqampvPrqq1x33XU88cQTWCwWFi5cSF9fHz09PVq8FIplUlISV199NWfOnFEHqomJCUZGRli4cCFlZWVs374dq9VKaWkpqampqrcj9EbTNOns7CQzM5NgMIjL5cI0TW3gEunkrVu3qk7/vn37+MEPfsCzzz7L8PAwXV1dZGdnc+7cOUZHR/V5hD2UnJw8w04xPT1d2TK33norzz77LB6Phx07dnDixAncbjeZmZlquWixWLDb7fh8Ptra2li8eDFvvfUWS5cuVeNyEXVraWmhpKSE3Nxcjhw5wo9//GN6e3s5duyYylnApMXj0NAQCxcu1IUzjDDC+Ktw+QV6saoTap9pmqqLIgF7yZIlrF27VkXGRMZYKIBSBI2OjtaOTIfDwdjYGCUlJRQXFxMKhSgoKND0TXNzs9IPJc8/Z84ctcwT1yhATwaSy5d8tWEYmsMuLi6mqamJ2267jZqaGoaGhsjJydGF55133uGOO+6gp6eH4eFhXC6XLlalpaXk5eXR3NzM3LlzmZiY0NOFmJPIrn3JkiWag5fgLFx6kX+QNIsUeD0ej+rax8bGcuutt2K329m/fz/Z2dmkp6cTFRXF2NiYeupKA1ooFNLnrqmpITMzk7Nnz7Jo0SJ2795NWVmZauBPTEyoOcmZM2cwTVMNVyIiIujt7b2wN1kYYVyZ+ECB/pLK0RuGgd1uV5OMYDCoTBan08natWs5e/YszzzzjOaWKysrKSwsVBbK2NgYgDohPfPMM9xwww0cPnwYp9NJXFwcDz/8MKOjoyQkJNDR0UEoFCImJoaRkRGio6Ox2+10dXWxfft2du/ePUP+V+QCpJkpJyeH4eFhNTpxOBx0d3eTn5/Pyy+/rIqY6enpWldIS0ujo6ND1Tm9Xi+VlZV4PB6OHj2KYRh4PB4OHjxIQ0MDubm56k8r3bYRERGcPXsWt9uN1WpVYxVBTEwMExMTDA4OqvlIbGwsPT09KiEMqCHInXfeydGjR4mJiSEUCpGWlkZ6erpq4kRERNDS0kJaWhr19fW0t7eTmprKwYMHiY2NZd68eWRmZtLU1ERbWxuRkZFMTEzQ2NioAmxivv7uu+9e2BsrjDD+xnFJ7eidTiexsbHEx8fT1dWlQl4iqZuRkYHVaqW3t1dz5FdddRWBQIDs7GzNxcfHxxMbG0tvby9paWmcO3eOQCBAbm4uBw8eJDk5mdLSUiwWi6Z5RP/eNE3sdjtpaWlMTEwwNDTE4OAgbW2TKg5xcXGq3S4dvGIMLicQ0boXNc5gMKia+fv372fNmjUAeDwe4uLieOGFF9i8ebPKCtfU1HD27FnWrVvHkSNHlM8vLloSRAsKChgcHCQ6OlobrEQSIi8vD6/Xq8bgoVCIuLg4pUYGAgGioqKYPXs2w8PDOBwOBgYGVM45OjoaQIO83W5n79695Ofn43a7OX/+PG1tbezatYvHHnuM/v5+QqEQfr9f01BCdRU3q9jYWNLT0/H5fDPkGsIII4y/GJdf6sbtdqvWuux+p3d7ejwe5s2bp3r0fr+f/Px8Kioq8Hg8fPzjH+eNN94gGAwSGxtLYWEhHo+Hp59+mi9+8Ys0NTXR399PWVkZMCm6ZbPZ6OjooL+/n8jISN2xw2SRUk4GUjh1OBwqFxwbG8vAwABpaWm0traqUJqcTNauXUtrayuDg4OsXbuWRx99lPz8fBUmS05O1nSP1+tlw4YN2Gw2Xn/9dRobG/F4PKSmpnLu3Dm8Xi+RkZFEREToqUUWKZgM/hkZGSq+lpCQoGmwpKQkBgYGNJcfERGh47RYLKSkpGhQNgyD6upqsrOzmTVrljKcGhsbSU9PZ2xsDLfbjcfjYffu3VitVj2dCDtK7AKnL6ROp1MF45KTkzl8+PAFurvCCOOKxuWXupG8t1jj9fb2aqNOKBRSvRhRXpTUwObNm0lMTNQGnkAgwNKlS4mKiqKsrIysrCyOHDmiC8Tg4KCaYre0tOBwOGZY5xmGMSOIZmRkaKAXW72xsTH1aR0fH8disTAyMsL4+LjaIfb09NDS0qJOUVu2bCEmJobq6mrOnDmj5hyhUIi5c+fy1FNPkZSUxPnz57Hb7cTGxtLU1ITX68XlcqmOjlA9U1JSaG1tJSYmhrS0NF2gYDLwR0ZGkpqaqieV4uJixsbGaGhooK+vT9M0NpuNiYkJTp8+jdPpZOPGjfT09GjaRYrHNpsNi8XC4cOH6e7uJi4ujp6eHrq6utTNSnjzosGTkpKiQm6RkZEMDQ3p6SiMMMK4MLikAn1+fj7l5eVERUUxMTGhaQ+LxaIpFElV2Gw20tPTaWpq0hTK/v37KSwsZMuWLVitVvr7+3E6nUqPzM3N1QYfMbSOiIggPj6e9vZ2EhMTtblH2DSjo6MzxMK+/e1vc+zYMX7/+9/T19dHWloaTU1NWK1WDMMgISGBUCiknHO73U5CQoJa6T3xxBN89rOf5Z133mHdunVaRBbjEK/XS0dHB36/n+HhYZVZCAaDat0nJuednZ2kpaWpqXdKSoqO81/+5V/w+XwcOnSI6upqnE4nR44c0eJ0fn4+VqtVWUWpqan4fD7i4uJobW2lurqaJUuW0NLSwpkzZ3C73dTW1rJy5UoVNJNu32XLljE6OqpaRdHR0QwMDBAVFUVbWxsxMTGaqvF4PNx22218//vfv+D3Vxhh/K3ikkrd/OxnPyMUCmkHa09PDw8++CB+v1/VJ2XXaBiG5oFDoRB33HEHAwMDlJaWkpOTQ3Z2NgUFBVroLC8vZ+XKlZw7d46mpiZVhZRio6hkDg0N8eUvf5nZs2er1szIyIjKKDz++ONqgBIMBnUBqqqq4je/+Q2ZmZl4vV59fil8xsXFkZWVpcJhhw4dwuPxEBMTw6xZs6ioqKC0tJRt27bxwgsvKCtFFj2YTMeIV63L5eJ73/se7e3tzJo1SwvWW7ZsAeCJJ55gfHxcvWoBLWwfOHCA119/neTkZLxer6Z4RN5g9uzZrFixgvz8fOrq6tSysLW1lYiICHp6elQ+uaGhAYvFosVd6RcYHx9XjSIpFgu91Gq1Koc/jDDC+Ktw+eXoBdPz5FJ4vFiQwPXHMAxjBhtHAt17Pfajxp96jd5r/HKCuFAQeYcL+TfDCONvBJdfjl4wPdd8MYM8/O+B+48XyIsR4AV/6jV6r3Fd6IArTWxhhBHGxcGlEugDQPXFHsRHgCTgSuv1vxLnBFfmvK7EOcGVOa+/dE45H+RBl0qgr/4gx4/LDYZhlF1p87oS5wRX5ryuxDnBlTmvj3pOl5RMcRhhhBFGGB8+woE+jDDCCOMKx6US6H9xsQfwEeFKnNeVOCe4Mud1Jc4Jrsx5faRzuiTolWGEEUYYYXx0uFR29GGEEUYYYXxEuOiB3jCM7YZhVBuGUWcYxjcu9nj+HBiG8bBhGF2GYVRMu5ZoGMZ+wzBqpz4nTF03DMP4ydQ8TxuGsfTijfx/h2EYWYZhHDQMo8owjErDML46df2ynZdhGBbDMEoNwzg1NadvTV3PMwzj6NScnjIMI2bqeuzU93VTP8+9mOP/UzAMI9IwjJOGYTw/9f2VMKdGwzDOGIZRbhhG2dS1y/b+ExiGEW8Yxu8Nwzg79f5ac6HmdVEDvWEYkcBDwHXAPOCThmHMu5hj+jPx38D2P7r2DeB10zRnA69PfQ+Tc5w99fFZ4GcXaIx/LsaBr5umWQSsBr449T+5nOcVBDaZplkMLAa2G4axGvg/wP+dmlMfcO/U4+8F+kzTnAX836nHXar4KlA17fsrYU4A15imuXga5fByvv8EDwAvm6Y5Fyhm8v92YeZlmuZF+wDWAK9M+/6bwDcv5pj+gjnkAhXTvq8G0qa+TmOyRwDg58An3+txl/IHsA/YcqXMC7ABJ4BVTDaoRE1d13sReAVYM/V11NTjjIs99veYS+ZUcNgEPA8Yl/ucpsbXCCT90bXL+v4D4oCGP37NL9S8LnbqJgNomfZ969S1yxkppmm2A0x9Tp66ftnNdep4vwQ4ymU+r6kURznQBewHzgH9pmmKNsP0ceucpn4+ALgv7Ig/EH4M/CMgOhduLv85AZjAq4ZhHDcM47NT1y7r+w/IB7qBR6ZSbb80DMPOBZrXxQ70xntcu1JpQJfVXA3DcADPAF8zTdP3px76HtcuuXmZpjlhmuZiJnfBK4Gi93rY1OdLfk6GYdwAdJmmeXz65fd46GUzp2lYZ5rmUibTF180DGPjn3js5TKvKGAp8DPTNJcAg/whTfNe+FDndbEDfSuQNe37TOByd6XoNAwjDWDqc9fU9ctmroZhRDMZ5B83TXP31OXLfl4Apmn2A28wWX+INwxDZECmj1vnNPVzF+C9sCN9X6wDbjIMoxH4LZPpmx9zec8JANM026Y+dwF7mFyYL/f7rxVoNU3z6NT3v2cy8F+QeV3sQH8MmD3FFIgB/g549iKP6a/Fs8BdU1/fxWSOW65/eqqavhoYkCPbpQTDMAzgV0CVaZo/mvajy3ZehmF4DMOIn/raCmxmshB2ENg19bA/npPMdRdwwJxKlF4qME3zm6ZpZpqmmcvk++aAaZp3cBnPCcAwDLthGE75GtgKVHAZ338Apml2AC2GYRROXboWeJcLNa9LoEixA6hhMmf6zxd7PH/m2J8E2oExJlfge5nMe74O1E59Tpx6rMEkw+gccAZYfrHH/7/MaT2TR8TTQPnUx47LeV7AIuDk1JwqgPunrucDpUAd8Dsgduq6Zer7uqmf51/sObzP/K4Gnr8S5jQ1/lNTH5USEy7n+2/a3BYDZVP34V4g4ULNK9wZG0YYYYRxheNip27CCCOMMML4iBEO9GGEEUYYVzjCgT6MMMII4wpHONCHEUYYYVzhCAf6MMIII4wrHOFAH0YYYYRxhSMc6MMII4wwrnCEA30YYYQRxhWO/x8C1b24srhT4QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAChCAYAAADJLnTIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAADPRJREFUeJzt3X+s3fVdx/HnS7oxZVNgDNK0VUAbBRNXsEEIi2HTzUKMYDIMxIRmIal/sIQlSwxo4vQ//cMxiUqsDumSCcNtjIYsY6TDzH8GtBuDQsfoXIVrK3WBsemSaeHtH+dz2aHc3nt67z33nPPZ85GcfM/3cz73nve7Ped1vvdzfqWqkCT16ycmXYAkabwMeknqnEEvSZ0z6CWpcwa9JHXOoJekzo0t6JNsS/JMkoNJbhnX9UiSFpdxvI4+ySnAN4H3AnPAY8D1VfX0ql+ZJGlR4zqivwQ4WFX/VlX/C9wDXD2m65IkLWJcQb8BeH5of66NSZLW2Lox/d4sMPa6NaIkO4AdbfdXx1SHJPXsO1X1jqUmjSvo54BNQ/sbgcPDE6pqJ7ATIIkfuCNJJ+/fR5k0rqWbx4DNSc5L8mbgOmD3mK5LkrSIsRzRV9WxJB8EHgROAe6sqqfGcV2SpMWN5eWVJ12ESzeStBz7qmrrUpN8Z6wkdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktQ5g16SxqiqmPRnio3r8+glaeyOD9Bkoe88mpzh+qpqYvUZ9OrKJO9MiznREd001brYUees1DktTlTj/Pha/3u6dKORTPOda/5P4/kap7lWaRI8oteipj00F6pvmo4+pWngEb0k4MQPkD5wzj6P6LWoab+TJ3ndUf201jsrdapPKwr6JIeA7wOvAMeqamuSM4FPAecCh4Dfq6qXVlamdGKzEpqzUOes1DitT7rPW+iBfZI1r8bSzburasvQ9xbeAuypqs3AnrYvSatmmkN+XpLXTvP7kzKONfqrgV3t/C7gmjFchyRpRCsN+gK+mGRfkh1t7JyqOgLQtmev8DokSSuw0idjL6+qw0nOBh5K8o1Rf7A9MOxYcqIkaUVWdERfVYfb9ihwH3AJ8EKS9QBte/QEP7uzqrYOre1LksZg2UGf5LQkb5s/D7wP2A/sBra3aduB+1dapCRp+VaydHMOcF97Jnkd8E9V9YUkjwH3JrkReA64duVlSpKWK9PwFvckky9CkmbPvlGWv/0IBEnqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktQ5g16SOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnVsy6JPcmeRokv1DY2cmeSjJs217RhtPktuTHEzyRJKLx1m8JGlpoxzR3wVsO27sFmBPVW0G9rR9gCuBze20A7hjdcqUJC3XkkFfVV8GXjxu+GpgVzu/C7hmaPwTNfAV4PQk61erWEnSyVvuGv05VXUEoG3PbuMbgOeH5s21sTdIsiPJ3iR7l1mDJGkE61b592WBsVpoYlXtBHYCJFlwjiRp5ZZ7RP/C/JJM2x5t43PApqF5G4HDyy9PkrRSyw363cD2dn47cP/Q+A3t1TeXAi/PL/FIkiZjyaWbJHcDVwBnJZkDPgL8OXBvkhuB54Br2/TPA1cBB4EfAB8YQ82SpJOQqskvj6/mGv1wP8lCTxlMh1mpU9JU21dVW5ea1NU7Y49/0KqqN4xNg4XqlKRxWe1X3UzMYmFZVVNx1DwLNc5brNZpq3O4nln5S2m+zmmuUf3oIuhHOSKetiBdyLTUuNS/5zTUOVzjrPxFNCt1qj9dLN1MOnRGMSt38lHrnIV+ZqFGaS10EfSjmIUHA/148TaptdLF0s0sSNLVEeYshNS01Tht9ejHRzdH9Ce6EyWZmjvYUnVMQ52j/HtNS52SRtPVEf0s3PlnoUaYjTpnoUZpGnRzRC9JWphBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SerckkGf5M4kR5PsHxr70yT/keTxdrpq6LJbkxxM8kyS3xpX4ZKk0YxyRH8XsG2B8duqaks7fR4gyYXAdcAvt5/52ySnrFaxkqSTt2TQV9WXgRdH/H1XA/dU1Q+r6tsMviT8khXUJ0laoZWs0X8wyRNtaeeMNrYBeH5ozlwbkyRNyHKD/g7g54EtwBHgL9v4Qh8nuOCHsCfZkWRvkr3LrEGSNIJlBX1VvVBVr1TVq8Df86PlmTlg09DUjcDhE/yOnVW1taq2LqcGSdJolhX0SdYP7f4uMP+KnN3AdUlOTXIesBl4dGUlSpJWYskvHklyN3AFcFaSOeAjwBVJtjBYljkE/AFAVT2V5F7gaeAYcFNVvTKe0iVJo8g0fI9pkskXIUmzZ98oy9++M1aSOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUueWDPokm5I8nORAkqeS3NzGz0zyUJJn2/aMNp4ktyc5mOSJJBePuwlJ0omNckR/DPhwVV0AXArclORC4BZgT1VtBva0fYArgc3ttAO4Y9WrliSNbMmgr6ojVfXVdv77wAFgA3A1sKtN2wVc085fDXyiBr4CnJ5k/apXLkkayUmt0Sc5F7gIeAQ4p6qOwODBADi7TdsAPD/0Y3NtTJI0AetGnZjkrcBngA9V1feSnHDqAmO1wO/bwWBpR5I0RiMd0Sd5E4OQ/2RVfbYNvzC/JNO2R9v4HLBp6Mc3AoeP/51VtbOqtlbV1uUWL0la2iivugnwceBAVX106KLdwPZ2fjtw/9D4De3VN5cCL88v8UiS1l6q3rCq8voJybuAfwWeBF5tw3/EYJ3+XuBngeeAa6vqxfbA8NfANuAHwAeqau8S17F4EZKkhewbZVVkyaBfCwa9JC3LSEHvO2MlqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUudG/irBMftv4JlJFzEGZwHfmXQRq6zHnqDPvnrsCfrsa7k9/dwok6Yl6J/p8SsFk+ztra8ee4I+++qxJ+izr3H35NKNJHXOoJekzk1L0O+cdAFj0mNfPfYEffbVY0/QZ19j7WkqvjNWkjQ+03JEL0kak4kHfZJtSZ5JcjDJLZOu52QkuTPJ0ST7h8bOTPJQkmfb9ow2niS3tz6fSHLx5Co/sSSbkjyc5ECSp5Lc3MZntq8kb0nyaJKvt57+rI2fl+SR1tOnkry5jZ/a9g+2y8+dZP2LSXJKkq8leaDt99DToSRPJnk8yd42NrO3v3lJTk/y6STfaPevy9aqr4kGfZJTgL8BrgQuBK5PcuEkazpJdwHbjhu7BdhTVZuBPW0fBj1ubqcdwB1rVOPJOgZ8uKouAC4Fbmr/J7Pc1w+B91TVO4EtwLYklwJ/AdzWenoJuLHNvxF4qap+AbitzZtWNwMHhvZ76Ang3VW1Zeglh7N8+5v3V8AXquqXgHcy+H9bm76qamIn4DLgwaH9W4FbJ1nTMno4F9g/tP8MsL6dX8/gPQIAfwdcv9C8aT4B9wPv7aUv4KeArwK/xuANKuva+Gu3ReBB4LJ2fl2bl0nXvkAvG1s4vAd4AMis99TqOwScddzYTN/+gJ8Gvn38v/la9TXppZsNwPND+3NtbJadU1VHANr27DY+c722P+8vAh5hxvtqSxyPA0eBh4BvAd+tqmNtynDdr/XULn8ZePvaVjySjwF/CLza9t/O7PcEUMAXk+xLsqONzfTtDzgf+C/gH9tS2z8kOY016mvSQZ8Fxnp9GdBM9ZrkrcBngA9V1fcWm7rA2NT1VVWvVNUWBkfBlwAXLDStbae+pyS/DRytqn3DwwtMnZmehlxeVRczWL64KcmvLzJ3VvpaB1wM3FFVFwH/w4+WaRayqn1NOujngE1D+xuBwxOqZbW8kGQ9QNsebeMz02uSNzEI+U9W1Wfb8Mz3BVBV3wX+hcHzD6cnmf8YkOG6X+upXf4zwItrW+mSLgd+J8kh4B4GyzcfY7Z7AqCqDrftUeA+Bg/Ms377mwPmquqRtv9pBsG/Jn1NOugfAza3Vwq8GbgO2D3hmlZqN7C9nd/OYI17fvyG9mz6pcDL83+yTZMkAT4OHKiqjw5dNLN9JXlHktPb+Z8EfpPBE2EPA+9v047vab7X9wNfqrZQOi2q6taq2lhV5zK433ypqn6fGe4JIMlpSd42fx54H7CfGb79AVTVfwLPJ/nFNvQbwNOsVV9T8CTFVcA3GayZ/vGk6znJ2u8GjgD/x+AR+EYG6557gGfb9sw2NwxeYfQt4Elg66TrP0FP72LwJ+ITwOPtdNUs9wX8CvC11tN+4E/a+PnAo8BB4J+BU9v4W9r+wXb5+ZPuYYn+rgAe6KGnVv/X2+mp+UyY5dvfUG9bgL3tdvg54Iy16st3xkpS5ya9dCNJGjODXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzv0/Xq85fnH7zJ0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tmp=data.squeeze(1)\n",
    "tmp=tmp.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8,normalize=True)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp)\n",
    "plt.show()\n",
    "\n",
    "tmp=target.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Net(nn.Module):\n",
    "    def __init__(self,in_channels,out_channels):\n",
    "        super(Net, self).__init__()\n",
    "        self.Conv1=nn.Sequential(\n",
    "            nn.Conv3d(in_channels,32,3,padding=1),\n",
    "            nn.BatchNorm3d(32),\n",
    "            nn.ReLU()\n",
    "        )\n",
    "        self.Conv2=nn.Sequential(\n",
    "            nn.Conv3d(32,64,3,padding=1),\n",
    "            nn.BatchNorm3d(64),\n",
    "            nn.ReLU()\n",
    "        )\n",
    "        self.Conv3=nn.Sequential(\n",
    "            nn.Conv3d(64,out_channels,3,padding=1),\n",
    "            nn.Softmax(dim=1)\n",
    "        )\n",
    "    def forward(self,input):\n",
    "        out=self.Conv1(input)\n",
    "        out=self.Conv2(out)\n",
    "        out=self.Conv3(out)\n",
    "        return out\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.08181655406951904\n"
     ]
    }
   ],
   "source": [
    "iters=100\n",
    "model=Net(1,2).cuda()\n",
    "optimizer=optim.Adam(model.parameters(),lr=0.001,betas=(0.9,0.99))\n",
    "lovasz_loss=LovaszSoftmax()\n",
    "ious=[]\n",
    "losses=[]\n",
    "for i in range(iters):\n",
    "    optimizer.zero_grad()\n",
    "    out1=model(data)\n",
    "    loss=lovasz_loss(out1,target)\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    _,pred1=out1.max(1)\n",
    "    iou=IoU(pred1.cpu().numpy(),target.cpu().numpy())\n",
    "    ious.append(iou)\n",
    "    losses.append(loss.item())\n",
    "plt.plot(ious)\n",
    "plt.show()\n",
    "print(np.min(losses))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IoU: 0.9352112669470343\n"
     ]
    }
   ],
   "source": [
    "_,pred1=out1.max(1)\n",
    "tmp=pred1.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()\n",
    "\n",
    "diff=(pred1-target).abs()\n",
    "tmp=diff.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()\n",
    "\n",
    "print('IoU: {}'.format(IoU(pred1.cpu().numpy(),target.cpu().numpy())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.005751252174377441\n"
     ]
    }
   ],
   "source": [
    "iters=100\n",
    "model=Net(1,2).cuda()\n",
    "optimizer=optim.Adam(model.parameters(),lr=0.001,betas=(0.9,0.99))\n",
    "dice_loss=MultiDiceLoss(weights=[0.5,0.5],num_class=2)\n",
    "lovasz_loss=LovaszSoftmax()\n",
    "losses=[]\n",
    "ious=[]\n",
    "for i in range(iters):\n",
    "    optimizer.zero_grad()\n",
    "    out2=model(data)\n",
    "    loss,_=dice_loss(out2,target)\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    _,pred2=out2.max(1)\n",
    "    iou=IoU(pred2.cpu().numpy(),target.cpu().numpy())\n",
    "    ious.append(iou)\n",
    "    losses.append(loss.item())\n",
    "plt.plot(ious)\n",
    "plt.show()\n",
    "print(np.min(losses))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IoU: 0.9885632587644293\n"
     ]
    }
   ],
   "source": [
    "_,pred2=out2.max(1)\n",
    "tmp=pred2.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()\n",
    "\n",
    "diff=(pred2-target).abs()\n",
    "tmp=diff.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()\n",
    "\n",
    "print('IoU: {}'.format(IoU(pred2.cpu().numpy(),target.cpu().numpy())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.024375952780246735\n"
     ]
    }
   ],
   "source": [
    "iters=100\n",
    "model=Net(1,2).cuda()\n",
    "optimizer=optim.Adam(model.parameters(),lr=0.001,betas=(0.9,0.99))\n",
    "dice_loss=MultiDiceLoss(weights=[0.5,0.5],num_class=2)\n",
    "lovasz_loss=LovaszSoftmax()\n",
    "losses=[]\n",
    "ious=[]\n",
    "for i in range(iters):\n",
    "    optimizer.zero_grad()\n",
    "    out2=model(data)\n",
    "    loss,_=dice_loss(out2,target)\n",
    "    loss2=lovasz_loss(out2,target)\n",
    "    loss=0.9*loss.cuda()+0.1*loss2\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    _,pred2=out2.max(1)\n",
    "    iou=IoU(pred2.cpu().numpy(),target.cpu().numpy())\n",
    "    ious.append(iou)\n",
    "    losses.append(loss.item())\n",
    "plt.plot(ious)\n",
    "plt.show()\n",
    "print(np.min(losses))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAChCAYAAADJLnTIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAADNpJREFUeJzt3X+M5PVdx/HnS65QpVWgFHLhTgG9KJjYAy8IoTG02noQI5gUAzHh0pCcf9CEJk0MaGL1P/3DUolKPC1yTSoU21IupCklV0z9p8BdS+GAUq4WufVOzgZKq02qwNs/5rMwLHu7c7s7OzOfPh/J5Dvfz3x25/2+m3nNdz/zK1WFJKlfPzHpAiRJ42XQS1LnDHpJ6pxBL0mdM+glqXMGvSR1bmxBn2R7kqeTHExy07iuR5K0tIzjdfRJTgC+BbwPmAMeAa6tqifX/MokSUsa1xH9RcDBqvq3qvpf4C7gyjFdlyRpCeMK+rOAQ0P7c21MkrTONozp92aRsTesESXZCexsu786pjokqWffrap3LjdpXEE/B2we2t8EHB6eUFW7gF0ASfzAHUk6fv8+yqRxLd08AmxJck6SE4FrgD1jui5J0hLGckRfVS8n+RBwP3ACcHtVPTGO65IkLW0sL6887iJcupGkldhfVduWm+Q7YyWpcwa9JHXOoJekzhn0ktQ5g16SOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUuXF9Hr0kjd3CD2VMFvvOo8mZlvoMenWlqqbuzg5vvsPPm6Zal/ok21mpc1ocq8b58fX+9zToNZJZC1BJrzPotSSDVJp9PhmrmTaNf2VI08Yjei1p1oJ0WutN8oa/jqaxzoU1Do9rtq0q6JM8C/wAeAV4uaq2JTkN+DRwNvAs8HtV9eLqypSObVaCaBbqtMa1sdgD+ySf51qLpZv3VNXWoe8tvAnYW1VbgL1tX5J+rCR57TS/PynjWKO/Etjdzu8GrhrDdUiSRrTaoC/gS0n2J9nZxs6sqiMAbXvGKq9DkrQKq30y9tKqOpzkDOCBJN8c9QfbA8POZSdKklZlVUf0VXW4bY8C9wAXAc8n2QjQtkeP8bO7qmrb0Nq+JGkMVhz0SU5O8vb588D7gQPAHmBHm7YDuHe1RUqSVm41SzdnAve0Z5I3AP9UVV9M8ghwd5LrgeeAq1dfpiRppTINb3FPMvkiJGn27B9l+duPQJCkzhn0ktQ5g16SOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1Lllgz7J7UmOJjkwNHZakgeSPNO2p7bxJLk1ycEkjyW5cJzFS5KWN8oR/R3A9gVjNwF7q2oLsLftA1wObGmnncBta1OmJGmllg36qvoK8MKC4SuB3e38buCqofFP1sBXgVOSbFyrYiVJx2+la/RnVtURgLY9o42fBRwamjfXxt4kyc4k+5LsW2ENkqQRbFjj35dFxmqxiVW1C9gFkGTROZKk1VvpEf3z80sybXu0jc8Bm4fmbQIOr7w8SdJqrTTo9wA72vkdwL1D49e1V99cDLw0v8QjSZqMZZduktwJXAacnmQO+Cjw58DdSa4HngOubtO/AFwBHAR+CHxwDDVLko5Dqia/PL7Wa/TzPSWLPWUwPWalTklTa39VbVtu0lo/GTtRCx+0pjVIF6tz2mqU1I9ugn6pv0ymJUhnoUZYuk6YrgfOhf9uw7VPU50LTetBiPrURdCPsvw0TUF6LLNQI0xPnfP/79Ow/DiKWalT/eniQ82mIXSWMyt38lHrnIV+ZqFGaT10EfSjmPSDwaSvX9PH24TWSxdLN1p/kw6pUY7WJ13jQtNWj358dHNEf6w7UZKpuYMtV8c01DlKDbNSp6SBro7oZ+HOb41rZ1bqlCatmyN6SdLiDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS55YN+iS3Jzma5MDQ2J8m+Y8kj7bTFUOX3ZzkYJKnk/zWuAqXJI1mlCP6O4Dti4zfUlVb2+kLAEnOB64Bfrn9zN8mOWGtipUkHb9lg76qvgK8MOLvuxK4q6p+VFXfYfAl4Retoj5J0iqtZo3+Q0kea0s7p7axs4BDQ3Pm2pgkaUJWGvS3AT8PbAWOAH/Zxhf7OMFFPzg8yc4k+5LsW2ENkqQRrCjoq+r5qnqlql4F/p7Xl2fmgM1DUzcBh4/xO3ZV1baq2raSGiRJo1lR0CfZOLT7u8D8K3L2ANckOSnJOcAW4OHVlShJWo1lv3gkyZ3AZcDpSeaAjwKXJdnKYFnmWeAPAKrqiSR3A08CLwM3VNUr4yldkjSKjPLdm2MvIpl8EZI0e/aPsvztO2MlqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHVu2aBPsjnJg0meSvJEkhvb+GlJHkjyTNue2saT5NYkB5M8luTCcTchSTq2UY7oXwY+UlXnARcDNyQ5H7gJ2FtVW4C9bR/gcmBLO+0EblvzqiVJI1s26KvqSFV9rZ3/AfAUcBZwJbC7TdsNXNXOXwl8sga+CpySZOOaVy5JGslxrdEnORu4AHgIOLOqjsDgwQA4o007Czg09GNzbUySNAEbRp2Y5G3AZ4EPV9X3kxxz6iJjtcjv28lgaUeSNEYjHdEneQuDkP9UVX2uDT8/vyTTtkfb+ByweejHNwGHF/7OqtpVVduqattKi5ckLW+UV90E+ATwVFV9bOiiPcCOdn4HcO/Q+HXt1TcXAy/NL/FIktZfqt60qvLGCcm7gX8FHgdebcN/xGCd/m7gZ4HngKur6oX2wPDXwHbgh8AHq2rfMtexdBGSpMXsH2VVZNmgXw8GvSStyEhB7ztjJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktQ5g16SOmfQS1LnRv4qwTH7b+DpSRcxBqcD3510EWusx56gz7567An67GulPf3cKJOmJeif7vErBZPs662vHnuCPvvqsSfos69x9+TSjSR1zqCXpM5NS9DvmnQBY9JjXz32BH321WNP0GdfY+1pKr4zVpI0PtNyRC9JGpOJB32S7UmeTnIwyU2Trud4JLk9ydEkB4bGTkvyQJJn2vbUNp4kt7Y+H0ty4eQqP7Ykm5M8mOSpJE8kubGNz2xfSd6a5OEk32g9/VkbPyfJQ62nTyc5sY2f1PYPtsvPnmT9S0lyQpKvJ7mv7ffQ07NJHk/yaJJ9bWxmb3/zkpyS5DNJvtnuX5esV18TDfokJwB/A1wOnA9cm+T8SdZ0nO4Ati8YuwnYW1VbgL1tHwY9bmmnncBt61Tj8XoZ+EhVnQdcDNzQ/k9mua8fAe+tqncBW4HtSS4G/gK4pfX0InB9m3898GJV/QJwS5s3rW4Enhra76EngPdU1dahlxzO8u1v3l8BX6yqXwLexeD/bX36qqqJnYBLgPuH9m8Gbp5kTSvo4WzgwND+08DGdn4jg/cIAPwdcO1i86b5BNwLvK+XvoCfAr4G/BqDN6hsaOOv3RaB+4FL2vkNbV4mXfsivWxq4fBe4D4gs95Tq+9Z4PQFYzN9+wN+GvjOwn/z9epr0ks3ZwGHhvbn2tgsO7OqjgC07RltfOZ6bX/eXwA8xIz31ZY4HgWOAg8A3wa+V1UvtynDdb/WU7v8JeAd61vxSD4O/CHwatt/B7PfE0ABX0qyP8nONjbTtz/gXOC/gH9sS23/kORk1qmvSQd9Fhnr9WVAM9VrkrcBnwU+XFXfX2rqImNT11dVvVJVWxkcBV8EnLfYtLad+p6S/DZwtKr2Dw8vMnVmehpyaVVdyGD54oYkv77E3FnpawNwIXBbVV0A/A+vL9MsZk37mnTQzwGbh/Y3AYcnVMtaeT7JRoC2PdrGZ6bXJG9hEPKfqqrPteGZ7wugqr4H/AuD5x9OSTL/MSDDdb/WU7v8Z4AX1rfSZV0K/E6SZ4G7GCzffJzZ7gmAqjrctkeBexg8MM/67W8OmKuqh9r+ZxgE/7r0NemgfwTY0l4pcCJwDbBnwjWt1h5gRzu/g8Ea9/z4de3Z9IuBl+b/ZJsmSQJ8Aniqqj42dNHM9pXknUlOaed/EvhNBk+EPQh8oE1b2NN8rx8AvlxtoXRaVNXNVbWpqs5mcL/5clX9PjPcE0CSk5O8ff488H7gADN8+wOoqv8EDiX5xTb0G8CTrFdfU/AkxRXAtxismf7xpOs5ztrvBI4A/8fgEfh6Buuee4Fn2va0NjcMXmH0beBxYNuk6z9GT+9m8CfiY8Cj7XTFLPcF/Arw9dbTAeBP2vi5wMPAQeCfgZPa+Fvb/sF2+bmT7mGZ/i4D7uuhp1b/N9rpiflMmOXb31BvW4F97Xb4eeDU9erLd8ZKUucmvXQjSRozg16SOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM79P0MaG53+1h4qAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IoU: 0.9638297865504752\n"
     ]
    }
   ],
   "source": [
    "_,pred2=out2.max(1)\n",
    "tmp=pred2.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()\n",
    "\n",
    "diff=(pred2-target).abs()\n",
    "tmp=diff.permute(1,0,2,3)\n",
    "grid=make_grid(tmp,nrow=8)\n",
    "grid_tmp=grid.cpu().numpy()\n",
    "grid_tmp=np.transpose(grid_tmp,(1,2,0))\n",
    "plt.imshow(grid_tmp*255,cmap='gray')\n",
    "plt.show()\n",
    "\n",
    "print('IoU: {}'.format(IoU(pred2.cpu().numpy(),target.cpu().numpy())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "os.path.isdi"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
